Repository: nystudio107/seomatic Branch: master Commit: 0876485e9aae Files: 182 Total size: 8.0 MB Directory structure: gitextract_5t9rtuet/ ├── .gitignore ├── CHANGELOG.md ├── DOCS.md ├── LICENSE.txt ├── README.md ├── SeomaticPlugin.php ├── composer.json ├── config.php ├── controllers/ │ └── SeomaticController.php ├── elementtypes/ │ └── Seomatic_MetaElementType.php ├── fieldtypes/ │ └── Seomatic_MetaFieldType.php ├── migrations/ │ ├── m151225_000000_seomatic_addHumansField.php │ ├── m151226_000000_seomatic_addTwitterFacebookFields.php │ ├── m160101_000000_seomatic_addRobotsFields.php │ ├── m160111_000000_seomatic_addTitleFields.php │ ├── m160122_000000_seomatic_addTypeFields.php │ ├── m160123_000000_seomatic_addOpeningHours.php │ ├── m160202_000000_seomatic_addSocialHandles.php │ ├── m160204_000000_seomatic_addGoogleAnalytics.php │ ├── m160205_000000_seomatic_addResturantMenu.php │ ├── m160206_000000_seomatic_addGoogleAnalyticsPlugins.php │ ├── m160206_000000_seomatic_addGoogleAnalyticsSendPageView.php │ ├── m160209_000000_seomatic_alterDescriptionsColumns.php │ ├── m160209_000001_seomatic_addRobotsTxt.php │ ├── m160227_000000_seomatic_addFacebookAppId.php │ ├── m160416_000000_seomatic_addContactPoints.php │ ├── m160509_000000_seomatic_addSiteLinksBing.php │ ├── m160707_000000_seomatic_addGoogleTagManager.php │ ├── m160715_000000_seomatic_addSeoImageTransforms.php │ ├── m160723_000000_seomatic_addSeoMainEntityOfPage.php │ ├── m160724_000000_seomatic_addSeoMainEntityCategory.php │ ├── m160811_000000_seomatic_addVimeo.php │ ├── m160904_000000_seomatic_addTwitterFacebookImages.php │ ├── m161220_000000_seomatic_addPriceRange.php │ ├── m170212_000000_seomatic_addGoogleAnalyticsAnonymizeIp.php │ └── m170212_000000_seomatic_addWikipedia.php ├── models/ │ ├── Seomatic_CreatorModel.php │ ├── Seomatic_IdentityModel.php │ ├── Seomatic_MetaFieldModel.php │ ├── Seomatic_MetaModel.php │ ├── Seomatic_SettingsModel.php │ ├── Seomatic_SiteMetaModel.php │ └── Seomatic_SocialModel.php ├── records/ │ ├── Seomatic_MetaRecord.php │ └── Seomatic_SettingsRecord.php ├── releases.json ├── resources/ │ ├── css/ │ │ ├── bootstrap-tokenfield.css │ │ ├── css-reset.css │ │ ├── field.css │ │ ├── seo-metrics-style.css │ │ └── style.css │ └── js/ │ ├── creator.js │ ├── field.js │ ├── field_settings.js │ ├── identity.js │ ├── main_entity_type_list.js │ ├── meta.js │ ├── metalist.js │ ├── seomatic.js │ ├── site.js │ └── type_list.js ├── services/ │ └── SeomaticService.php ├── templates/ │ ├── _error.twig │ ├── _facebookDisplayPreview.twig │ ├── _googleAnalytics.twig │ ├── _googleDisplayPreview.twig │ ├── _googleTagManager.twig │ ├── _humans.twig │ ├── _humansDefault.twig │ ├── _humansPreview.twig │ ├── _preview_display_modal.twig │ ├── _preview_humans_modal.twig │ ├── _preview_robots_modal.twig │ ├── _preview_tags_modal.twig │ ├── _robots.twig │ ├── _robotsDefault.twig │ ├── _robotsPreview.twig │ ├── _seo_meta.twig │ ├── _seo_metaPreview.twig │ ├── _seo_metrics.twig │ ├── _seo_metrics_floater.twig │ ├── _seomatic_tabs.twig │ ├── _twitterCardDisplayPreview.twig │ ├── creator/ │ │ └── _edit.twig │ ├── field.twig │ ├── field_settings.twig │ ├── identity/ │ │ └── _edit.twig │ ├── index.twig │ ├── json-ld/ │ │ ├── _json-ld.twig │ │ └── _json-ld_core.twig │ ├── meta/ │ │ ├── _edit.twig │ │ ├── _main.twig │ │ ├── _sidebar.twig │ │ └── index.twig │ ├── seometrics.twig │ ├── settings.twig │ ├── site/ │ │ └── _edit.twig │ ├── social/ │ │ └── _edit.twig │ └── welcome.twig ├── translations/ │ ├── fr.php │ └── nl.php ├── twigextensions/ │ └── SeomaticTwigExtension.php ├── variables/ │ └── SeomaticVariable.php └── vendor/ ├── autoload.php ├── composer/ │ ├── ClassLoader.php │ ├── LICENSE │ ├── autoload_classmap.php │ ├── autoload_namespaces.php │ ├── autoload_psr4.php │ ├── autoload_real.php │ ├── autoload_static.php │ └── installed.json ├── crodas/ │ └── text-rank/ │ ├── .travis.yml │ ├── LICENSE │ ├── README.md │ ├── composer.json │ ├── lib/ │ │ └── TextRank/ │ │ ├── Config.php │ │ ├── DefaultEvents.php │ │ ├── POS/ │ │ │ └── English/ │ │ │ ├── Tagger.php │ │ │ ├── generate.php │ │ │ ├── lexicon.php │ │ │ └── lexicon.txt │ │ ├── Stopword/ │ │ │ ├── Stopword.php │ │ │ ├── czech-stopwords.txt │ │ │ ├── danish-stopwords.txt │ │ │ ├── dutch-stopwords.txt │ │ │ ├── english-stopwords.txt │ │ │ ├── finnish-stopwords.txt │ │ │ ├── french-stopwords.txt │ │ │ ├── generate.php │ │ │ ├── german-stopwords.txt │ │ │ ├── hungarian-stopwords.txt │ │ │ ├── italian-stopwords.txt │ │ │ ├── norwegian-stopwords.txt │ │ │ ├── polish-stopwords.txt │ │ │ ├── portuguese-stopwords.txt │ │ │ ├── russian-stopwords.txt │ │ │ ├── spanish-stopwords.txt │ │ │ ├── swedish-stopwords.txt │ │ │ └── turkish-stopwords.txt │ │ ├── Stopword.php │ │ ├── Summary.php │ │ ├── SummaryPageRank.php │ │ ├── TextRank.php │ │ └── language-profile.php │ ├── phpunit.xml │ └── tests/ │ ├── QuickTest.php │ ├── bootstrap.php │ └── fixtures/ │ ├── english1.expected │ ├── english1.summary │ ├── english1.txt │ ├── italian.expected │ ├── italian.summary │ ├── italian.txt │ ├── spanish1.expected │ ├── spanish1.summary │ └── spanish1.txt ├── davechild/ │ └── textstatistics/ │ ├── .travis.yml │ ├── LICENSE │ ├── README.md │ ├── composer.json │ ├── phpunit.xml.dist │ ├── src/ │ │ └── DaveChild/ │ │ └── TextStatistics/ │ │ ├── Maths.php │ │ ├── Pluralise.php │ │ ├── Resource.php │ │ ├── Syllables.php │ │ ├── Text.php │ │ ├── TextStatistics.php │ │ └── resources/ │ │ ├── DaleChallWordList.php │ │ ├── Homographs.txt │ │ └── SpacheWordList.php │ └── tests/ │ ├── TextStatisticsCMULexTest.php │ ├── TextStatisticsKiplingIfTest.php │ ├── TextStatisticsMaths.php │ ├── TextStatisticsMelvilleMobyDickTest.php │ ├── TextStatisticsPluralise.php │ └── TextStatisticsTest.php └── sunra/ └── php-simple-html-dom-parser/ ├── README.md ├── Src/ │ └── Sunra/ │ └── PhpSimple/ │ ├── HtmlDomParser.php │ └── simplehtmldom_1_5/ │ ├── change_log.txt │ └── simple_html_dom.php └── composer.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ bower_components .DS_Store .idea ================================================ FILE: CHANGELOG.md ================================================ # SEOmatic Changelog ## 1.1.56 - 2017.11.10 ### Changed * Fixed a regression that would cause field sources to not appear in the SEOmatic FieldType ## 1.1.55 - 2017.11.05 ### Added * Added the ability to disable locales via the `config.php` file, for multi-site reasons * Added paranoid checking for deleted source fields in the FieldType ### Changed * Fixed an issue with the breadcrumbs potentially overlapping URLs improperly * Truncate locales to 5 characters, to handle custom locales ## 1.1.54 - 2017.10.10 ### Changed * More intelligent handling of `addTrailingSlashesToUrls` ## 1.1.53 - 2017.10.06 ### Changed * Fixed a regression with certain types of localized sites ## 1.1.52 - 2017.10.02 ### Changed * Fixed breadcrumbs (and other URLs) for certain multi-locale setups * Fixed an issue with `hreflang='x-default'` with non-localized sites ## 1.1.51 - 2017.09.21 ### Added * Added support for `hreflang="x-default"` * Added `availabilty` to the default `Offer` Product JSON-LD ### Changed * Fixed an issue where you could not change the Open Graph or Twitter `title` from a Twig template * Handle localized elements for breadcrumbs ## 1.1.50 - 2017.08.10 ### Added * Add the ability to override the canonicalUrl from an SEOmatic Meta FieldType ### Changed * Updated the documentation ## 1.1.49 - 2017.08.02 ### Changed * Don't render "article:tag" if there are no keywords * Fix issue when passing a string containing the "à" character to _cleanupText() * Changed `referrer` from `always` to `no-referrer-when-downgrade` * Fixed an issue where meta vars were not sanitized with a custom template passed via `seomaticTemplatePath` * Fixed a cosmetic bug where the SEOmatic FieldType settings didn't display the OpenGraph Image Source Changeable properly * Fixed an issue with template metas on Windows ## 1.1.48 - 2017.06.18 ### Changed * Fixed an issue on old versions of PHP < PHP 5.4 with `http_response_code()` * Added a safer default `robots.txt` template ## 1.1.47 - 2017.06.08 ### Changed * Fixed an issue with Live Preview and a previous or draft version of an entry * Fixed a problem where the `dataLayer` wasn't passed down to the Google Tag Manager script * Commerce products now have the `name` set to the variant + title ## 1.1.46 - 2017.04.08 ### Changed * Force `publisher` to be a `Person` or `Organization` for news articles * Fixed the AdminCP documentation URL ## 1.1.45 - 2017.03.26 ### Changed * Fixed an issue with `addTrailingSlashesToUrls` and certain PHP configurations ## 1.1.44 - 2017.03.23 ### Changed * Fixed an issue with SEOmetrics and PHP 7.1 that would cause `Error parsing the DOM` errors * Include our own copy of jQuery for SEOmetrics, rather than depending on the Craft version * The calls to `file_get_contents` for SEOmetrics are now much more permissive ### Fixed * If the current request is a 404, set the `canonicalUrl` to an empty string * If the `canonicalUrl` is set to an empty string, don't render the ` Dun & Bradstreet in `DOCS.md` ### Fixed * Return error messages from internally rendered templates as $htmlText * Fix for extracting content from a Neo field ## 1.1.42 - 2017.02.12 * [Fixed] Fixed a regression that could cause FieldTypes to not save properly * [Improved] Moved the lattitude/longitude info down below the address information for on the Site Identity & Site Creator settings * [Improved] Wrapped all `templates->render()` calls in try/catch blocks to more gracefully handle errors * [Added] Added an `Anonymize IP` toggle for Google Analytics, for compliance with some local laws * [Added] Added Wikipedia to the Social Media settings & `sameAs` entity information ## 1.1.41 - 2017.02.10 * [Improved] Broke the changelog out to CHANGELOG.md * [Fixed] Fixed a bug when saving meta fails * [Fixed] Fixed an issue with the Charge plugin if you used the Charge element path * [Fixed] Fixed an issue where re-saving a Section might not re-save the SEOmatic FieldType info * [Improved] Updated the README.md ## 1.1.40 - 2016.12.20 * [Added] Added support for DigitalProducts and other base purchaseables * [Fixed] Fixed Commerce deprecation warnings * [Improved] The FieldType now works with all unknown elementtypes * [Improved] Works with Eager Loaded elements * [Improved] Improved the checking on the image fields in case there isn’t anything in there * [Improved] Always sanitize the array values * [Improved] Updated the README.md ## 1.1.39 - 2016.09.23 * [Improved] Don't redirect to the welcome page if we're being installed via Console command * [Improved] Updated the README.md ## 1.1.38 - 2016.09.22 * [Fixed] Fixed an issue with Entry meta and Template Meta would not default Twitter and Facebook images properly * [Fixed] Fixed an issue where Facebook and Twitter image transforms were not properly applied with Entry and Template meta * [Fixed] Fixed an issue where elements with certain characters in them could cause invalid Breadcrumb JSON-LD to be generated * [Improved] The Javascript for the SEOmetrics `Analyze` button now returns false to eliminate the # * [Improved] Updated the README.md ## 1.1.37 - 2016.09.18 * [Fixed] The Settings template now works with Craft < 2.5 * [Fixed] Fixed a regression that would cause php errors on the settings pages on PHP < 5.5 * [Improved] Updated the README.md ## 1.1.36 - 2016.09.07 * [Fixed] SEOmetrics will now work if `open_basedir` is set * [Improved] Added html_entity_decode() to the _cleanupText() method * [Fixed] Fixed an `Integrity constraint violation` MySQL error on certain MySQL versions * [Improved] Updated the README.md ## 1.1.35 - 2016.09.06 * [Fixed] Fixed a regression that would cause Twitter and Facebook images to not show up * [Improved] Updated the README.md ## 1.1.34 - 2016.09.05 * [Added] Added the ability to set separate images for Twitter Cards and Facebook OpenGraph images * [Improved] Do more sanity checking when building the breadcrumbs, so it works if you have not element with the URI `__home__` * [Improved] We don't swap in the element->title for mainEntityOfPage anymore * [Added] Added a variable for craft.seomatic.getTemplateMeta() * [Improved] Protocol-relative URLs are now allowed in the Schema * [Added] Added `PageWeight` as a metric in SEOmetrics * [Added] Added the headings to the SEOmetrics display to improve its readability * [Improved] SEOmetrics now does a better job displaying Top Keywords on pages with very little text * [Improved] Updated the README.md ## 1.1.32 - 2016.08.25 * [Improved] The SEOmetrics tab in the AdminCP now doesn't start analyzing until you click Analyze * [Improved] Improved SEOmetric's sitemap.xml detection * [Improved] Updated DOCS.md to reflect the change from `seomaticProduct` to `seomaticMainEntityOfPage` * [Improved] Products now have commas stripped from their price, and use a `.` as a decimal point * [Fixed] Fixed an issue that caused SEOmatic to throw an error in a tokenized entry draft * [Fixed] Fixed an issue with stale SEOmatic FieldTypes that were added to a section, but then later removed * [Improved] Updated the README.md ## 1.1.31 - 2016.08.15 * [Added] SEOmetrics now has its own tab, and can evaluate any arbitrary URL you paste into it * [Added] SEOmatic can now pull images from FocusPoint FieldTypes * [Added] Added 'Person' as a type for the Main Entity of Page * [Added] Added Vimeo Handle to Social Media settings * [Added] Added a 'globalMetaOverride' setting to config.php * [Added] SEOmetrics checks for HTML validity via the WC3 Validator * [Added] Added a Score % summary for each SEOmetrics category * [Added] SEOmetrics now includes Google Pagespeed Insights scores and Google Mobile Usability * [Added] SEOmetrics checks for SSL encryption via https * [Improved] Better extraction of 'top keywords on page' in SEOmetrics * [Improved] SEOmetrics now looks for link rel='publisher' * [Improved] Refined SEOmetrics a bit, and added more 'Learn More' links * [Fixed] The mainEntityOfPage is no longer improperly cached if being called by getJsonLd() * [Improved] Updated the README.md ## 1.1.30 - 2016.08.05 * [Added] Added 'Learn More' link for JSON-LD structured data in SEOmetrics * [Added] Breadcrumbs get added to WebPage objects, too * [Improved] SEOmatic now remembers the selected locale in its tabbed settings * [Improved] Fixed a regression in SEOmetric's keyword in URL checking * [Improved] Increased HTML SimpleDom's MAX_FILE_SIZE to allow for parsing larger pages (especially with devMode on) * [Improved] SEOmetrics handles missing robots.txt files more elegantly * [Improved] SEOmetrics no longer depends on there being an meta description tag * [Fixed] Fixed an error when using the Share arrow on a draft from Live Preview * [Fixed] Fixed an issue accessing getJsonLd from an entry that has no URLs or has empty SEOmatic values * [Fixed] mainEntityOfPage now works for Template Metas * [Improved] Updated the README.md ## 1.1.29 - 2016.07.31 * [Added] Added the ability to extract seoTitle, seoDescription, and seoKeywords from Neo fields * [Added] Added the ability to extract seoTitle, seoDescription, and seoKeywords from Preparse fields * [Added] Added detection of Twitter Card meta tags, OpenGraph meta tags, and JSON-LD structured data in SEOmetrics * [Added] Added detection robots.txt and sitemaps in SEOmetrics * [Improved] Breadcrumbs are now generated for every element that matches a URI in the current URL segments * [Improved] seoTitles, seoDescriptions, and seoKeywords are now truncated on save in SEOmatic Meta FieldTypes when they pull from other fields * [Improved] Improved the SEOmetrics preview CSS a bit * [Improved] Updated the README.md ## 1.1.28 - 2016.07.27 * [Added] Added modified_time and published_time to OpenGraph articles when an SEOmatic Meta FieldType is used * [Improved] Safeguard against 'Undefined index: seoImageTransform' * [Fixed] Handle non-posted entries * [Fixed] Fixed an issue with getJsonLD($element) * [Improved] Updated the README.md ## 1.1.27 - 2016.07.26 * [Fixed] Fixed a regression with Entry Meta cascade * [Fixed] Fixed an issue with SEOmatic FieldTypes on categories * [Fixed] Fixed invalid releases.json * [Improved] We now strip all control characters (including \n and \r) from the JSON-LD arrays * [Improved] Updated the README.md ## 1.1.26 - 2016.07.25 * [Added] Added Main Entity of Page JSON-LD microdata * [Added] Added the method getJsonLD($element) to the FieldType model, so you can get the Main Entity of Page JSON-LD for an arbitrary entry (maybe in a craft.entries loop, for instance) * [Improved] The 'logo' and 'image' in Creator and Identity JSON-LD is now an ImageObject * [Improved] Added a space after each keyword in SEOmetrics to prevent horizontal scrolling due to frame overflow * [Fixed] Fixed the locale of the transform fields in the FieldType * [Fixed] Fix for empty SEO Titles for breadcrumbs * [Improved] Updated the DOCS.md and wiki docs * [Improved] Updated the README.md ## 1.1.25 - 2016.07.19 * [Fixed] Fixed an issue with SEO images not rendering properly via the FieldType * [Fixed] Fixed a typo that would cause Template Metas to not save properly * [Improved] Added a fallback if `iconv` is not installed for UTF-8 conversion * [Improved] Explicitly state that the SEO Image must be in JPG, PNG, or GIF format * [Improved] Updated the README.md ## 1.1.24 - 2016.07.18 * [Added] You can now specify image transforms for your SEO Image, Twitter Image, and Facebook Image for Site Meta, Template Meta, and Entry Metas * [Added] Added og:image:type, og:image:width, and og:image:height to the OpenGraph meta * [Added] Added support for Breadcrumbs JSON-LD microdata * [Improved] the Twig array keys are now quoted in the display preview * [Improved] Trimmed the fat on some of the settings storage maxLength's * [Added] Added the ability to control the name of the GTM dataLayer variable * [Fixed] Added renderGoogleTagManagerScript in config.php * [Improved] The GTM script tags are now rendered when `devMode` is on, for debugging GTM * [Improved] Updated the README.md ## 1.1.23 - 2016.07.08 * [Added] Added support for Google Tag Manager (including `dataLayer`) * [Fixed] Keywords in the SEOmatic Meta FieldType are now tokenized again * [Fixed] Fixed Javascript error in the FieldType Source popup menu * [Fixed] Fix Undefined index in getLocalizedUrls * [Improved] Change seoKeywords -> seoKeywordsUnparsed * [Added] Add accessors for seoTitleUnparsed, seoDescriptionUnparsed, and seoKeywordsUnparsed * [Improved] meta keywords and meta description tags only render if they are non-empty * [Improved] Updated the README.md ## 1.1.22 - 2016.06.27 * [Fixed] Fixed the variable accessor rountines getSocial() and getIdentity() * [Fixed] Fixed an issue with the 'custom' data not displaying in SEOmatic Meta FieldTypes * [Improved] Updated the README.md ## 1.1.21 - 2016.06.25 * [Improved] Contents of SEOmatic Meta FieldTypes are now parsed when they are saved, rather than at runtime, which should be faster, and also makes the contents of the fields always accessible. Please re-save your Sections that use SEOmatic FieldTypes as per: [https://github.com/nystudio107/seomatic/wiki/05.-SEO-Entry-Meta](https://github.com/nystudio107/seomatic/wiki/05.-SEO-Entry-Meta) * [Added] The SEO Title, SEO Description, and SEO Keywords fields in Template Metas can now include tags that output entry properties, such as `{title}` or `{myCustomField}` in them * [Added] Added a `getLocalizedUrls` Twig filter/function that returns an array of localized URLs for the current request * [Improved] The SEOmetrics window will now remember its open/closed state while in Live Preview * [Improved] Some minor tweaks to the SEOmetrics CSS * [Improved] The current locale is now included in the hreflang for localized sites * [Improved] The language and country code are now both included in the hreflang for localized sites * [Improved] The full URL to the current page is now used in the hreflang for localized sites * [Improved] style and script tags are now stripped out before doing any SEOmetrics on the page * [Added] Added approximate reading time in the Textual Analysis section of the SEOmetrics * [Added] You can now control the string prepended to the title tag when devMode is on via config.php * [Added] Added a French localization for SEOmatic, thanks to @FrancisBou * [Fixed] We should not properly catch exceptions when there are errors in the variables in the SEOmatic FieldType fields * [Fixed] Fixed a bug where SEOmetrics might not appear on certain setups that use https * [Fixed] Fixed Twitter cards, changed `property` to `name` * [Improved] Updated the README.md ## 1.1.20 - 2016.06.06 * [Added] Added 'Focus Keywords' to the SEOmetrics window, letting you analyze your page content for specific SEO keywords * [Fixed] Fixed an issue with environmentalVariables in the Site Identity/Entity URL field * [Improved] Forced CSS style reset on the SEOmetrics skeleton styles * [Improved] Include port numbers with getFullyQualifiedUrl() * [Improved] More accurate text to HTML % calculations * [Improved] Changed the CSS z-index of the SEOmetrics windows to be 9998/9 * [Improved] Updated the README.md ## 1.1.19 - 2016.05.30 * [Fixed] Fixed an issue where the SEOmetrics wouldn't render on certain server setups * [Added] Added a list of the top keywords on the page to the SEOmetrics * [Improved] Updated the README.md ## 1.1.18 - 2016.05.30 * [Added] Added "SEOmetrics" displayed during Live Preview that analyizes your page, and generates helpful tips for improving SEO * [Fixed] SEOmatic will now populate its FieldType with default values on `saveElement()`, which is triggered via import plugings and also via Settings → Edit My Section → hit Save * [Fixed] Added 'logo' and 'image' to the list of keys that should be always run through getFullyQualifiedUrl() * [Fixed] Fixed a CSS issue with the AdminCP UI and very large screens * [Improved] Updated the README.md ## 1.1.17 - 2016.05.09 * [Added] Added support for Google Sitelinks Search Box * [Added] Added support for Bing site verification * [Fixed] Fixed a visual display issue with the SEOmatic FieldType Source labels * [Fixed] Facebook Article tags now use the proper data for author: and publisher: * [Improved] Updated the README.md ## 1.1.16 - 2016.04.29 * [Added] Added `craft()->seomatic->headlessRenderSiteMeta()` for headless Craft CMS installs * [Improved] Fixed an issue where Twitter and Facebook properties were double-encoded * [Fixed] Fixed a visual display issue with tabs and Craft 2.4.x * [Fixed] Fixed a localization issue with extractTextFromMatrix() * [Improved] SEOmatic now converts any objects passed into ths seomatic variables to string automatically* * [Improved] Updated the README.md ## 1.1.15 - 2016.04.25 * [Added] Added a `siteUrlOverride` config setting for when you need to override the `siteUrl`, for instance in a headless ElementAPI server * [Added] Added breadcrumbs to the AdminCP UI * [Added] Added the ability to change the display name of the SEOmatic plugin in the AdminCP * [Improved] Fixed an issue with empty organizationOwnerContactPoints * [Improved] The array passed into renderJSONLD() is now sanitized before it is rendered * [Improved] craft.locale is now properly limited to an ISO 639-1 language code in the metadata * [Improved] Facebook locales now ensure that they have a territory as well as a language, e.g.: fr_FR, not just fr * [Improved] Updated the README.md ## 1.1.14 - 2016.04.19 * [Added] Added [Organization Contact Points](https://developers.google.com/structured-data/customize/contact-points) that can appear in the Google Knowledge panel in some searches * [Added] You can control whether Product JSON-LD is rendered via the `renderCommerceProductJSONLD` config variable * [Added] Added support for arrays as the root JSON-LD type in the JSON-LD generator * [Improved] SEOmatic now outputs JSON-LD microdata for all of the Craft Commerce Product Variants (previously it was outputting only the default Variant) * [Improved] Updated the README.md ## 1.1.13 - 2016.04.16 * [Added] If an SEOmatic FieldType is attached to a Craft Commerce Product, in addition to rendering the page SEO Meta, it will also generate [Product JSON-LD microdata](https://developers.google.com/structured-data/rich-snippets/products) that describes the product. * [Improved] SEOmatic now uses control panel sub-navs if you're running Craft 2.5 or later * [Improved] Updated the README.md ## 1.1.12 - 2016.04.14 * [Improved] SEOmatic will now populate its FieldType with default values on saveElement(), which is triggered via import plugings and also via Settings → Edit My Section → hit Save * [Improved] Updated the README.md ## 1.1.11 - 2016.04.08 * [Fixed] Fixed an issue with rendering the humans.tx and robots.txt templates * [Improved] An HTML comment is added if the Google Analytics script is not included due to LivePreview or devMode being on * [Improved] Updated the README.md ## 1.1.10 - 2016.03.29 * [Fixed] Fixed API 'deprecation' errors with Craft 2.6.2778 or later * [Improved] Added more controls for the default title, description, and keywords values in config.php * [Improved] Updated the README.md ## 1.1.9 - 2016.03.17 * [Fixed] Fixed a typo in the Preview SEO Tags window * [Fixed] We now handle Twig errors in SEOmatic FieldType fields gracefully * [Improved] Query strings are now stripped from the canonical URL * [Improved] All things that should be fully qualified URLs are now fully qualified URLs, even if you specify them via path or relative URL * [Improved] Updated the README.md ## 1.1.8 - 2016.03.10 * [Improved] In the SEOmatic FieldType, moved default setting to prepValue() so it'll work if the entries are all re-saved via `resaveAllElements` * [Added] Added getFullyQualifiedUrl() helper as a Twig function/filter and as a variable for Twig templating * [Improved] Turn things that should be fully qualified URLs into fully qualified URLs, such as the canonicalUrl, seoImage, and anything with `url` as a key * [Improved] Added seoImage() and seoImageID() to the model so you can get at those values from, say, `entry.seoField.seoImage()` * [Fixed] canonicalUrl fixes for multilingual sites * [Fixed] Fixed errant ordinal encoding of the first element in a sequential array * [Improved] Updated the README.md ## 1.1.7 - 2016.03.04 * [Fixed] Fixed a regression that would cause the Place JSON-LD to render incorrectly * [Fixed] Fixed a nasty bug that would cause SEOmatic to crash if you used `{title}` or other variables in your SEOmatic Entry Meta fields * [Improved] Updated the README.md ## 1.1.6 - 2016.03.03 * [Fixed] Fixed a fun recursion bug that would cause meta arrays nested more than 1 deep to not be sanitized & parsed properly * [Added] Added Composer support for `type: craft-plugin` in `composer.json` * [Fixed] Removed the `?>` from the `config.php` as per Lindsey's best practices * [Fixed] The meta variables rendered by `craft.seomatic.renderIdentity()`, `craft.seomatic.renderWebsite()` and `craft.seomatic.renderPlace()` are now taken from the Twig context, so they can be modified before output * [Fixed] The metas will now be cached as intended (oops), which should increase performance a bit * [Improved] Updated the README.md ## 1.1.5 - 2016.02.27 * [Added] Added support for OpenGraph `article` types * [Added] Added support for OpenGraph `fb:app_id` on the Social Media settings * [Fixed] The canonicalUrl should be set properly to a fully qualified URL now * [Fixed] The Site Creator will now remember the LocalBusiness and Corporation settings * [Fixed] The SEOmatic FieldType will preview the canonicalUrl properly now * [Improved] Updated the README.md ## 1.1.4 - 2016.02.19 * [Added] Set the default Twig escaping strategy for robots.txt and humans.txt to false (so the tag output is not escaped) * [Fixed] Handle the case where there is no Twitter field * [Fixed] Handle empty OpeningHours spec correctly, and other OpeningHours fixes * [Fixed] actionRenderRobots is now publicly accessible (doh!), allowing `robots.txt` to render properly when not logged in * [Fixed] Fixed a template error on the SEO Site Meta tab on localized sites * [Improved] Updated the Roadmap section with pending bugs/features * [Improved] Removed the siteRobotsTxt from the globals display * [Improved] Updated the README.md ## 1.1.3 - 2016.02.17 * [Fixed] Fixed some typos in SEOmatic & the docs re: `robots.txt` * [Fixed] The Google Analytics script no longer renders if the Google Analytics Tracking ID field is empty * [Fixed] Fixed an issue with console errors on the backend with the SEOmatic FieldType * [Fixed] OpeningHours now only displays for LocalBusiness * [Added] SEOmatic now processes adding the SEO Site Name to the `og` and `twitter` titles just before rendering, so you can do things like change the `seomaticSiteMeta.siteSeoTitlePlacement` via Twig, and it'll do the right thing * [Fixed] Fixed a PHP error if the Site Creator is a Person * [Improved] Updated the README.md ## 1.1.1 - 2016.02.09 * [Added] SEOmatic Meta FieldTypes now work to automatically set meta when attached to `Categories` and also Craft Commerce `Products` * [Improved] The Google Analytics script tag is not included during Live Preview anymore * [Added] Added the ability to reference the fields of an SEOmatic FieldType via `entry.mySeomaticField.seoTitle` & `entry.mySeomaticField.seoDescription` & `entry.mySeomaticField.seoKeywords` * [Added] There is now significantly more space available for the Entity Description and Creator Description * [Fixed] Fixed an issue with PHP 5.3 * [Added] SEOmatic now handles `robots.txt`; it's configured on the SEO Site Meta tab * [Improved] Updated the README.md ## 1.1.0 - 2016.02.07 * [Added] Added all of the schema.org Organization types to Identity settings * [Added] SEOmatic Meta FieldTypes now have settings that let you restrict the Asset Sources available to them * [Added] SEOmatic Meta FieldTypes now let you set the default Source settings for each field * [Added] SEOmatic Meta FieldTypes now let you choose if the Source can be changed when editing an entry * [Added] You can include tags that output entry properties, such as `{title}` or `{myCustomField}` in SEOmatic FieldType fields. * [Added] Twitter Card and Facebook types can now have null values in the FieldType, and Template meta settings * [Added] We now include separate Place JSON-LD for Organizations (in addition to being part of the Identity) * [Added] Added the Opening Hours fields for LocalBusiness, and include the `openingHoursSpecification` in the Site Identity and Place JSON-LD * [Added] Added support for Google Analytics on the Site Identity tab * [Added] Added the ability to control whether a `PageView` is automatically sent by Google Analytics * [Added] Added support for enabling Google Analytics plugins on an a la carte basis * [Fixed] We now handle numeric Google+ accounts properly * [Fixed] The Preview buttons display properly on mobile devices for the SEOmatic FieldType now * [Improved] Added links to WooRank.com for the SEO Title, SEO Description, and SEO Keywords tags that explain best practices for them * [Added] Added a `config.php` file where you can override some of SEOmatic's default behaviors * [Added] Added `menu` and `acceptsReservations` fields for FoodEstablishments * [Improved] Converted all of the `.html` template files over to `.twig` * [Added] Expanded the JSON-LD parser to support ordinal arrays of associative arrays * [Fixed] Fixed an issue with the cannonical URL and some localized sites * [Improved] Updated the README.md ## 1.0.12 - 2016.01.19 * [Improved] Performance improvement by not checking to see if a template exists before matching it * [Improved] Keyword tags are now saved onblur * [Improved] The Preview buttons in the SEOmatic FieldType are laid out better now * [Improved] Updated the README.md ## 1.0.11 - 2016.01.13 * [Added] You can now set Tags fields to be a Source for SEO FieldType Meta fields * [Added] Added a meta referrer tag to the template (set to 'always') * [Added] Added a http-equiv='Content-Type' content='text/html; charset=utf-8' meta tag * [Fixed] If the SEO Title is empty, it no longer appear in the title * [Fixed] Fixed an issue that would cause the seomatic* variables to not be properly sanitized * [Improved] Updated the README.md ## 1.0.10 - 2016.01.12 * [Added] You can now set Matrix blocks to be a Source for SEO FieldType Meta fields; it iterates through all text and rich text fields * [Added] Added a extractTextFromMatrix() Twig filter/function/variable for templating use * [Improved] The truncateStringOnWord() function does a much better job on comma-delimited keywords now * [Fixed] Fixed a regression that caused the 'New Template Meta' button to be broken * [Improved] Updated the README.md ## 1.0.9 - 2016.01.11 * [Added] Added tokenized input fields for the keywords for the Site Meta, Template Meta, and Field Meta * [Added] You can now specify the position of the SEO Site Title relative to the Title * [Added] You can now specify the separator character that appears between the SEO Site Title and the Title * [Fixed] Potentially fixed an issue with iconv when using the extractKeywords() or extractSummary() filters * [Fixed] Fixed a regression that caused the Template Metas to stop working on the front-end * [Improved] Updated the README.md ## 1.0.8 - 2016.01.08 * [Improved] The rendering of the Identity and WebSite JSON-LD is now done via a tag in the templates, giving flexibility to people who want to use custom templates * [Fixed] Fixed an issue with PHP < 5.4 * [Added] If the site is in devMode, `[devMode]` is prepended to the `` * [Fixed] Fixed an issue if a plugin (like A&M forms) renders a template with Twig code in the template name * [Improved] Updated the README.md ## 1.0.7 - 2016.01.01 * [Added] Added a 'robots' field globally to the SEO Meta for specifying noindex/nofollow * [Fixed] Added error handling to the 'Look up Latitude/Longitude' buttons * [Fixed] Some minor template / logic issues * [Improved] Updated the README.md ## 1.0.6 - 2015.12.31 * [Added] Added an SEOmatic Meta field type that allows you to attach meta to Entries/Sections * [Added] The SEOmatic Meta field type can have custom date, or pull from other fields in that Entry, or even extract keywords from other fields * [Added] You can preview the settings from SEOmatic Meta field types that are attached to entries * [Fixed] Fixed db error on install on Windows due to trying to set a default for `genericCreatorHumansTxt` * [Fixed] Facebook Open Graph tags weren't being generated if you had no Facebook Profile ID set, which could cause templating errors * [Fixed] The `seomatic.twitter.creator` field wasn't set unless `summary_large_image` was chosen, which could cause templating errors * [Fixed] The seomaticMeta variables were being overzealously encoded as htmlentities * [Fixed] Fixed an issue where weird characters would appear in truncated strings on certain versions of PHP * [Improved] All JSON-LD rendered through SEOmatic is now minified if you have the Minify plugin installed * [Improved] Updated the README.md ## 1.0.5 - 2015.12.28 * [Added] Added 'renderJSONLD' Twig function & filter, and 'craft.seomatic.renderJSONLD()' variable for rendering arbitary JSON-LD schemas * [Added] SEOmatic now uses 'renderJSONLD' internally to render the Identity and WebSite JSON-LD microdata, rather than templates * [Added] The 'seomaticIdenity' and 'seomaticCreator' variables are now proper JSON-LD arrays that can be manipulated/added to via Twig * [Added] Refactored a bunch of internal code to support the new Identity & WebSite formats * [Added] Rolled all of the SEOmatic calculated variables into the 'seomaticHelper' array * [Added] Added support for humans.txt authorship accreditation via a tag and template * [Fixed] Fixed some sticky encoding issues with meta variables * [Fixed] Cleaned up the code base so we're no longer passing objects around into the templates, just pure arrays, for efficiency's sake * [Added] Support for Twitter Summary & Summary with Large Image cards * [Added] The Twitter Card variables are now rendered into the semomaticMeta array, and thus can be independently manipulated * [Added] The Facebook Open Graph variables are now rendered into the semomaticMeta array, and thus can be independently manipulated * [Added] Database migrations to support the new features * [Improved] Updated the README.md ## 1.0.4 - 2015.12.22 * [Added] Added 'copyrightNotice', 'addressString', 'addressHtml', & 'mapUrl' to 'seomaticIdentity' * [Added] Added 'copyrightNotice', 'addressString', 'addressHtml', & 'mapUrl' to 'seomaticCreator' * [Added] Added 'hasMap' to the 'location' schema * [Added] Added a 'Look up Latitude/Longitude' button to the Site Identity & Site Creator settings * [Fixed] Fixed an issue with the releases.json; the 'Update' button should show up going forward for the plugin * [Improved] The length of the 'seoSiteName' is now taken into account when truncating the 'seoTitle' * [Improved] Updated the README.md ## 1.0.3 - 2015.12.21 * [Fixed] Fixed an issue with the TextRank lib not being properly in the git repo, causing it to error when used * [Fixed] The SEOmatic settings pages now have a SAVE button on them for Craft 2.4 * [Improved] Updated the README.md ## 1.0.2 - 2015.12.20 * [Added] Exposed a few more utility functions via Twig filters & functions * [Added] The genericOwnerEmail & genericCreatorEmail variables are ordinal-encoded, to obfuscate them * [Added] Added 'location': 'Place' type to the Identity & Creator schemas, including GeoCoordinates * [Fixed] Fixed the localization so SEOmatic works if your Admin CP is in a language other than English * [Improved] Updated the README.md ## 1.0.1 - 2015.12.19 * [Added] If the [Minify](https://github.com/nystudio107/minify) plugin is installed, SEOmatic will minify the SEO Meta tags & JSON-LD * [Improved] Improved the caching mechanism to span all of the meta * [Fixed] Fixed a few of small errors * [Improved] Updated the README.md to better document SEOmatic ## 1.0.0 - 2015.12.18 * Initial release Brought to you by [nystudio107](http://nystudio107.com) ================================================ FILE: DOCS.md ================================================ # SEOmatic plugin for Craft A turnkey SEO implementation for Craft CMS that is comprehensive, powerful, and flexible. ![Screenshot](resources/screenshots/seomatic01.png) ## Installation To install SEOmatic, follow these steps: 1. Download & unzip the file and place the `seomatic` directory into your `craft/plugins` directory 2. -OR- do a `git clone https://github.com/nystudio107/seomatic.git` directly into your `craft/plugins` folder. You can then update it with `git pull` 3. -OR- install with Composer via `composer require nystudio107/seomatic` 4. Install plugin in the Craft Control Panel under Settings > Plugins 5. The plugin folder should be named `seomatic` for Craft to see it. GitHub recently started appending `-master` (the branch name) to the name of the folder for zip file downloads. SEOmatic works on Craft 2.4.x, Craft 2.5.x, and Craft 2.6.x. ## Overview ### Video overview of SEOmatic: [![Video Overview of SEOmatic](https://img.youtube.com/vi/f1149YVEF_0/0.jpg)](https://www.youtube.com/watch?v=f1149YVEF_0) SEOmatic allows you to quickly get a website up and running with a robust, comprehensive SEO strategy. It is also implemented in a Craft-y way, in that it is also flexible and customizable. The SEOmetrics feature scans your content for focus keywords, and offers analysis on how to improve your SEO. It implements [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata, [Dublin Core](http://dublincore.org) core metadata, [Twitter Cards](https://dev.twitter.com/cards/overview) tags, [Facebook OpenGraph](https://developers.facebook.com/docs/sharing/opengraph) tags, [Humans.txt](http://humanstxt.org) authorship accreditation, and as well as HTML meta tags. To better understand how all of this metadata benefits your website, please read: [Promote Your Content with Structured Data Markup](https://developers.google.com/structured-data/) The general philosophy is that SEO Site Meta can be overridden by SEO Template Meta, which can be overridden by SEO Entry Meta, which can be overridden by dynamic SEO Twig tags. In this way, the SEO Meta tags on your site cascade, so that they are globally available, but also can be customized in a very granular way. SEOmatic populates your templates with SEO Meta in the same way that Craft populates your templates with `entry` variables, with a similar level of freedom and flexibility in terms of how you utilize them. SEOmatic also caches each unique SEO Meta request so that your website performance is minimally impacted by the rich SEO Meta tags provided. ## Rendering your SEO Meta tags All you need to do in order to output the SEOmatic SEO Meta tags is in the `<head>` tag of your main `layout.twig` (or whatever template all of your other templates `extends`), place this tag: {% hook 'seomaticRender' %} That's it. It'll render all of that SEO goodness for you. SEOmatic uses its own internal template for rendering; but you can provide it with one of your own as well, just use this Twig code instead: {% set seomaticTemplatePath = 'path/template' %} {% hook 'seomaticRender' %} ...and it'll use your custom template instead. If the [Minify](https://github.com/nystudio107/minify) plugin is installed, SEOmatic will minify the SEO Meta tags & JSON-LD. ## Configuring SEOmatic When you first install SEOmatic you'll see a welcome screen, click on the **Get Started** to, well, get started configuring SEOmatic. All of the SEOmatic settings are fully localizable, so you can have SEO in as many languages as your website supports. If any field is left blank for a setting in a particular locale, it will fall back on the primary locale. ### SEO Site Meta These SEO Site Meta settings are used to globally define the Meta for the website. When no SEO Template Meta is found for a webpage, these settings are used by default. They are used in combination with the SEO Template Meta settings to generate [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata, [Dublin Core](http://dublincore.org) core metadata, [Twitter Cards](https://dev.twitter.com/cards/overview), [Facebook OpenGraph](https://developers.facebook.com/docs/sharing/opengraph), and as well as HTML meta tags. If no Template Meta exists for a template, the SEO Site Meta is used. If any fields are left blank in a Template Meta, those fields are pulled from the SEO Site Meta. You can also dynamically change any of these SEO Meta fields in your Twig templates, and they will appear in the rendered SEO Meta. * **Site SEO Name** - This field is used wherever the name of the site is referenced, both at the trailing end of the `<title>` tag, and in other meta tags on the site. It is initially set to your Craft `{{ siteName }}`. * **Site SEO Title** - This should be between 10 and 70 characters (spaces included). Make sure your title tag is explicit and contains your most important keywords. Be sure that each page has a unique title tag. * **Site SEO Name Placement** - Where the Site SEO Name is placed relative to the Title in the `<title>` tag * **Site SEO Name Separator** - The character that should be used to separate the Site SEO Name and Title in the `<title>` tag * **Site SEO Description** - This should be between 70 and 160 characters (spaces included). Meta descriptions allow you to influence how your web pages are described and displayed in search results. Ensure that all of your web pages have a unique meta description that is explicit and contains your most important keywords. * **Site SEO Keywords** - Google ignores this tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on. * **Site SEO Image** - This is the image that will be used for display as the global website brand, as well as on Twitter Cards and Facebook OpenGraph that link to the website, if they are not specified. The image must be in JPG, PNG, or GIF format. * **Site SEO Image Transform** - The image transform to apply to the Site SEO Image. * **Site Twitter Card Type** - With Twitter Cards, you can attach rich photos and information to Tweets that drive traffic to your website. Users who Tweet links to your content will have a “Card” added to the Tweet that’s visible to all of their followers. * **Site Twitter Card Image** - This is the image that will be used for display on Twitter Cards in tweets that link to the website. If no image is specified here, the Site SEO Image will be used for Twitter Cards instead. The image must be in JPG, PNG, or GIF format. * **Site Twitter Card Image Transform** - The image transform to apply to the Twitter SEO Image. Twitter recommends: 120 x 120 pixels minimum size, 1:1 aspect ratio, 1mb max size for Summary Card images, and 280x150 pixels minimum size, 1.86:1 aspect ratio, 1mb max size for Summary Card with Large Image images. * **Site Facebook OpenGraph Type** - Adding OpenGraph tags to your website influences the performance of your links on social media by allowing you to control what appears when a user posts a link to your content on Facebook. * **Site Facebook OpenGraph Image** - This is the image that will be used for display on Facebook posts that link to the website. If no image is specified here, the Site SEO Image will be used for Facebook posts instead. The image must be in JPG, PNG, or GIF format. * **Site Facebook OpenGraph Image Transform** - The image transform to apply to the Facebook SEO Image. Facebook recommends: 1200 x 630 pixels minimum size, 1.9:1 aspect ratio, 8mb max size. * **Site Robots** - The [robots meta tag](https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag?hl=en) lets you utilize a granular, page-specific approach to controlling how an individual page should be indexed and served to users in search results. Setting it to a blank value means 'no change'. #### SiteLinks Search Box With [Google Sitelinks search box](https://developers.google.com/structured-data/slsb-overview), from search results. Search users sometimes use navigational queries, typing in the brand name or URL of a known site or app, only to do a more detailed search once they reach their destination. * **Search Targets** - This property specifies a search URL pattern for sending queries to your site's search engine. It must include a string enclosed in curly braces that is a placeholder for the user's search query (e.g., `{search_term_string}`). The string inside the curly braces must also appear in the name attribute of the query-input property. * **Search Query Input** - The value for the name attribute of query-input must match the string enclosed inside curly braces in the target property of potentialAction, e.g.: `searchtermstring` #### robots.txt * **robots.txt Template** - A `robots.txt` file is a file at the root of your site that indicates those parts of your site you don’t want accessed by search engine crawlers. The file uses the [Robots Exclusion Standard](http://en.wikipedia.org/wiki/Robots_exclusion_standard#About_the_standard), which is a protocol with a small set of commands that can be used to indicate access to your site by section and by specific kinds of web crawlers (such as mobile crawlers vs desktop crawlers). SEOmatic automatically handles requests for `/robots.txt`. For this to work, make sure that you do not have an actual `robots.txt` file in your `public/` folder (because that will take precedence). If you are running Nginx, make sure that you don't have a line like: location = /robots.txt { access_log off; log_not_found off; } ...in your config file. A directive like this will prevent SEOmatic from being able to service the request for `/robots.txt`. If you do have a line like this in your config file, just comment it out, and restart Nginx with `sudo nginx -s reload`. The **Preview Robots.txt** button lets you preview what your rendered robots.txt file will look like. You can use any Craft `environmentVariables` in these fields in addition to static text, e.g.: This is my {baseUrl} ### Site Identity These Site Identity settings are used to globally define the identity and ownership of the website. They are used in combination with the SEO Template Meta settings to generate [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata, [Dublin Core](http://dublincore.org) core metadata, [Twitter Cards](https://dev.twitter.com/cards/overview), [Facebook OpenGraph](https://developers.facebook.com/docs/sharing/opengraph), and as well as HTML meta tags. The Site Owner type determines the JSON-LD schema that will be used to identity the website to search engines. Leave any fields blank that aren't applicable or which you do not want as part of the SEO schema. #### Site Ownership * **Google Site Verification** - For the `<meta name='google-site-verification'>` tag. Only enter the code in the `content=''`, not the entire tag. [Here's how to get it.](https://www.google.com/webmasters/verification/). * **Bing Site Verification** - For the `<meta name='msvalidate.01'>` tag. Only enter the code in the `content=''`, not the entire tag. [Here's how to get it.](https://www.bing.com/webmaster/help/how-to-verify-ownership-of-your-site-afcfefc6). * **Google Tag Manager ID** - If you enter your Google Tag Manager ID here, the Google Tag Manager script tags will be included in your `<head>` (the script is not included during Live Preview). Only enter the ID, e.g.: `GTM-XXXXXX`, not the entire script code. [Here's how to get it.](https://support.google.com/tagmanager/answer/6102821?hl=en) * **Google Analytics Tracking ID** - If you enter your Google Analytics Tracking ID here, the Google Analytics script tags will be included in your `<head>` (the script is not included if `devMode` is on or during Live Preview). Only enter the ID, e.g.: `UA-XXXXXX-XX`, not the entire script code. [Here's how to get it.](https://support.google.com/analytics/answer/1032385?hl=en) * **Automatically send Google Analytics PageView** - Controls whether the Google Analytics script automatically sends a PageView to Google Analytics when your pages are loaded * **Google Analytics Plugins** - Select which Google Analytics plugins to enable. [Learn More](https://developers.google.com/analytics/devguides/collection/analyticsjs/) * **Site Owner Entity Type** - The type of entity that owns this website. Choose as general or specific of a type as you like. Any entity sub-type left blank is ignored. More fields will also appear depending on the selected **Site Owner Entity Type**. For instance, any `LocalBusiness` sub-type will receive a field for **Opening Hours**, so that the hours that the business is open will be rendered in the Identity and Place JSON-LD microdata. ##### Google Tag Manager Note that the Google Tag Manager implementation supports the `dataLayer` property. You can set it like any other Twig array: {% set dataLayer = { 'pageCategory': entry.category, 'visitorType': 'high-value' } %} You can set the `dataLayer` Twig variable either in your templates that extend your `layout.twig` or in your `layout.twig` itself. The usual rules on Twig variable scoping apply, you just need to set the `dataLayer` array before the `{% hook seomaticRender %}` is called. [Learn More](https://developers.google.com/tag-manager/devguide) There is also a `gtmDataLayerVariableName` variable in `config.php` which allows you to control the name of the Javascript `dataLayer` variable. #### General Info * **Entity Name** - The name of the entity that owns the website * **Alternate Entity Name** - An alternate or nickname for the entity that owns the website * **Entity Description** - A description of the entity that owns the website * **Entity URL** - A URL for the entity that owns the website * **Entity Brand** - An image or logo that represents the entity that owns the website. The image must be in JPG, PNG, or GIF format. * **Entity Telephone** - The primary contact telephone number for the entity that owns the website * **Entity Email** - The primary contact email address for the entity that owns the website #### Location Info * **Entity Latitude** - The latitude of the location of the entity that owns the website, e.g.: -120.5436367 * **Entity Longitude** - The longitude of the location of the entity that owns the website, e.g.: 80.6033588 * **Entity Street Address** - The street address of the entity that owns the website, e.g.: 123 Main Street * **Entity Locality** - The locality of the entity that owns the website, e.g.: Portchester * **Entity Region** - The region of the entity that owns the website, e.g.: New York or NY * **Entity Postal Code** - The postal code of the entity that owns the website, e.g.: 14580 * **Entity Country** - The country in which the entity that owns the website is located, e.g.: US #### Organization Info * **Organization DUNS Number** - The DUNS (Dun & Bradstreet) number of the organization/company/restaurant that owns the website * **Organization Founder** - The name of the founder of the organization/company/restaurant * **Organization Founding Date** - The date the organization/company/restaurant was founded * **Organization Founding Location** - The location where the organization/company/restaurant was founded * **Organization Contact Points** - Use [organization contact points](https://developers.google.com/structured-data/customize/contact-points) to add your organizations's contact information to the Google Knowledge panel in some searches. The Telephone Number must be an internationalized version of the phone number, starting with the '+' symbol and country code (+1 in the US and Canada). e.g.: +1-800-555-1212 or +44-2078225951 #### Local Business Info * **Opening Hours** - The opening hours for this local business. If the business is closed on a given day, just leave the hours for that day blank. #### Corporation Info * **Corporation Ticker Symbol** - The exchange ticker symbol of the corporation #### Food Establishment Info * **Food Establishment Cuisine** - The primary type of cuisine that the food establishment serves * **Food Establishment Menu URL** - URL to the food establishment's menu * **Food Establishment Reservations URL** - URL to the food establishment's reservations page #### Person Info * **Person Gender** - The gender of the person * **Person Birth Place** - The place where the person was born You can use any Craft `environmentVariables` in these fields in addition to static text, e.g.: This is my {baseUrl} ### Social Media These Social Media settings are used to globally define the social media accounts associated with your website. They are used in combination with the SEO Template Meta settings to generate [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata, [Dublin Core](http://dublincore.org) core metadata, [Twitter Cards](https://dev.twitter.com/cards/overview), [Facebook OpenGraph](https://developers.facebook.com/docs/sharing/opengraph), and as well as HTML meta tags. None of these fields are mandatory; if you don't have a given social media account, just leave it blank. * **Twitter Handle** - Your Twitter Handle, without the preceding @ * **Facebook Handle** - Your Facebook company/fan page handle (the part after `https://www.Facebook.com/` * **Facebook Profile ID** - Your Facebook Profile/Page ID. Click on the 'About' tab on your Facebook company/fan page, click on 'Page Info', then scroll to the bottom to find your 'Facebook Page ID' * **Facebook App ID** - Your Facebook App ID. Providing a Facebook Application ID for use with the Social Media Sharing feature is recommended, but optional. [Learn More](https://developers.facebook.com/docs/apps/register) * **LinkedIn Handle** - Your LinkedIn page handle (the part after `https://www.linkedin.com/in/` or `https://www.linkedin.com/company/`) * **Google+ Handle** - Your Google+ page handle, without the preceding +. If you have a numeric Google+ account still, just enter that. * **YouTube User Handle** - Your YouTube handle (the part after `https://www.youtube.com/user/`) * **YouTube Channel Handle** - Your YouTube handle (the part after `https://www.youtube.com/c/`) * **Instagram Handle** - Your Instagram handle * **Pinterest Handle** - Your Pinterest page handle (the part after `https://www.pinterest.com/`) * **Github Handle** - Your Github page handle (the part after `https://github.com/`) You must have a **Twitter Handle** for SEOmatic to generate Twitter Card tags for you. Similarly, you should have a **Facebook Profile ID** for the Facebook Open Graph tags, but it's not required. You can use any Craft `environmentVariables` in these fields in addition to static text, e.g.: This is my {baseUrl} ### Site Creator These Site Creator settings are used to globally define & attribute the creator of the website. The creator is the company/individual that developed the website. They are used in combination with the SEO Template Meta settings to generate [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata, [Dublin Core](http://dublincore.org) core metadata, [Twitter Cards](https://dev.twitter.com/cards/overview), [Facebook OpenGraph](https://developers.facebook.com/docs/sharing/opengraph), and as well as HTML meta tags. The Site Creator information is referenced in the Identity JSON-LD schema that is used to identity the website to search engines. Leave any fields blank that aren't applicable or which you do not want as part of the SEO schema. #### Site Creator * **Site Creator Entity Type** - The type of entity that created this website. #### General Info * **Entity Name** - The name of the entity that created the website * **Alternate Entity Name** - An alternate or nickname for the entity that created the website * **Entity Description** - A description of the entity that created the website * **Entity URL** - A URL for the entity that created the website * **Entity Brand** - An image or logo that represents the entity that created the website. The image must be in JPG, PNG, or GIF format. * **Entity Telephone** - The primary contact telephone number for the entity that created the website * **Entity Email** - The primary contact email address for the entity that created the website #### Location Info * **Entity Latitude** - The latitude of the location of the entity that created the website, e.g.: -120.5436367 * **Entity Longitude** - The longitude of the location of the entity that created the website, e.g.: 80.6033588 * **Entity Street Address** - The street address of the entity that created the website, e.g.: 575 Dunfrey Road * **Entity Locality** - The locality of the entity that created the website, e.g.: Lansing * **Entity Region** - The region of the entity that created the website, e.g.: Michigan or MI * **Entity Postal Code** - The postal code of the entity that created the website, e.g.: 11360 * **Entity Country** - The country in which the entity that created the website is located, e.g.: US #### Organization Info * **Organization DUNS Number** - The DUNS (Dun & Bradstreet) number of the organization/company/restaurant that created the website * **Organization Founder** - The name of the founder of the organization/company * **Organization Founding Date** - The date the organization/company was founded * **Organization Founding Location** - The location where the organization/company was founded * **Organization Contact Points** - Use [organization contact points](https://developers.google.com/structured-data/customize/contact-points) to add your organizations's contact information to the Google Knowledge panel in some searches. The Telephone Number must be an internationalized version of the phone number, starting with the '+' symbol and country code (+1 in the US and Canada). e.g.: +1-800-555-1212 or +44-2078225951 #### Corporation Info * **Corporation Ticker Symbol** - The exchange ticker symbol of the corporation #### Person Info * **Person Gender** - The gender of the person * **Person Birth Place** - The place where the person was born #### Humans.txt * **Humans.txt Template** - [Humans.txt](http://humanstxt.org) is an initiative for knowing the people behind a website. It's a TXT file that contains information about the different people who have contributed to building the website. This is the template used to render it; you have access to all of the SEOmatic variables. This is the template used to render it; you have access to all of the SEOmatic variables. The **Preview Humans.txt** button lets you preview what your rendered Humans.txt file will look like. You can use any Craft `environmentVariables` in these fields in addition to static text, e.g.: This is my {baseUrl} ### SEO Template Meta This list of Template Metas will initially be empty; click on the **New Template Meta** button to create one. These SEO Meta settings are used to render the SEO Meta for your website. You can create any number of SEO Template Metas associated with your Twig templates on your website. They are used in combination with the SEO Template Meta settings to generate [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata, [Dublin Core](http://dublincore.org) core metadata, [Twitter Cards](https://dev.twitter.com/cards/overview), [Facebook OpenGraph](https://developers.facebook.com/docs/sharing/opengraph), and as well as HTML meta tags. If no Template Meta exists for a template, the SEO Site Meta is used. If any fields are left blank in a Template Meta, those fields are pulled from the SEO Site Meta. You can also dynamically change any of these SEO Meta fields in your Twig templates, and they will appear in the rendered SEO Meta. * **Title** - The human readable title for this SEO Template Meta * **Template Path** - Enter the path to the template to associate this meta with (just as you would on the Section settings). It will override the SEO Site Meta for this template. Leave any field blank if you want it to fall back on the default global settings for that field. * **Main Entity of Page** - The Main Entity of Page is a more specific, additional type that describes this page. This additional JSON-LD structured data entity will be added to your page, more specifically describing the page's content. It is accessible via the `seomaticMainEntityOfPage` Twig variable, should you wish to modify or add to it * **SEO Title** - This should be between 10 and 70 characters (spaces included). Make sure your title tag is explicit and contains your most important keywords. Be sure that each page has a unique title tag. * **SEO Description** - This should be between 70 and 160 characters (spaces included). Meta descriptions allow you to influence how your web pages are described and displayed in search results. Ensure that all of your web pages have a unique meta description that is explicit and contains your most important keywords. * **SEO Keywords** - Google ignores this tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on. * **SEO Image** - This is the image that will be used for display as the webpage brand for this template, as well as on Twitter Cards and Facebook OpenGraph that link to this page, if they are not specified. The image must be in JPG, PNG, or GIF format. * **SEO Image Transform** - The image transform to apply to the Site SEO Image. * **Twitter Card Type** - With Twitter Cards, you can attach rich photos and information to Tweets that drive traffic to your website. Users who Tweet links to your content will have a “Card” added to the Tweet that’s visible to all of their followers. * **Twitter Card Image** - This is the image that will be used for Twitter Cards that link to this page. If no image is specified here, the Site SEO Image will be used for Twitter Cards instead. The image must be in JPG, PNG, or GIF format. * **Twitter Card Image Transform** - The image transform to apply to the Twitter Card Image. Twitter recommends: 120 x 120 pixels minimum size, 1:1 aspect ratio, 1mb max size for Summary Card images, and 280x150 pixels minimum size, 1.86:1 aspect ratio, 1mb max size for Summary Card with Large Image images. * **Facebook OpenGraph Type** - Adding OpenGraph tags to your website influences the performance of your links on social media by allowing you to control what appears when a user posts a link to your content on Facebook. * **Facebook OpenGraph Image** - This is the image that will be used for Facebook posts that link to this page. If no image is specified here, the Site SEO Image will be used for Facebook posts instead. The image must be in JPG, PNG, or GIF format. * **Facebook OpenGraph Image Transform** - The image transform to apply to the Facebook OpenGraph Image. Facebook recommends: 1200 x 630 pixels minimum size, 1.9:1 aspect ratio, 8mb max size. * **Robots** - The [robots meta tag](https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag?hl=en) lets you utilize a granular, page-specific approach to controlling how an individual page should be indexed and served to users in search results. Setting it to a blank value means 'no change'. The **SEO Title**, **SEO Description**, and **SEO Keywords** fields can include tags that output entry properties, such as `{title}` or `{myCustomField}` in them. You can use any Craft `environmentVariables` in these fields in addition to static text, e.g.: This is my {baseUrl} ## SEO Entry Meta ![Screenshot](resources/screenshots/seomatic03.png) SEOmatic provides a FieldType called `SEOmatic Meta` that you can add to your Sections. It allows you to provide meta information on a per-entry basis. SEOmatic will automatically override any Site Meta or Tempalate Meta with Entry Meta if an `entry` that has an SEOmatic Meta field is auto-populated by Craft into a template. This also works with Categories and Craft Commerce Products that have an SEOmatic Meta field attached to them. If you add an SEOmatic FieldType to an existing Section that already has entries in it, you'll need to re-save the Section to populate the newly added SEOmatic FieldType with data. You can do this via Settings → Edit My Section → hit Save. If any fields are left blank in an Entry Meta, those fields are pulled from the SEO Site Meta / SEO Template Meta. You can also dynamically change any of these SEO Meta fields in your Twig templates, and they will appear in the rendered SEO Meta. * **Main Entity of Page** - The Main Entity of Page is a more specific, additional type that describes this entry. This additional JSON-LD structured data entity will be added to your page, more specifically describing the page's content. It is accessible via the `seomaticMainEntityOfPage` Twig variable, should you wish to modify or add to it. * **SEO Title** - This should be between 10 and 70 characters (spaces included). Make sure your title tag is explicit and contains your most important keywords. Be sure that each page has a unique title tag. * **SEO Description** - This should be between 70 and 160 characters (spaces included). Meta descriptions allow you to influence how your web pages are described and displayed in search results. Ensure that all of your web pages have a unique meta description that is explicit and contains your most important keywords. * **SEO Keywords** - Google ignores this tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on. * **SEO Image** - This is the image that will be used for display as the webpage brand for this entry, as well as on Twitter Cards and Facebook OpenGraph that link to this page, if they are not specified. The image must be in JPG, PNG, or GIF format. * **Canonical URL Override** - The canonical URL is automatically set to the entry's URL. This allows you to override the canonical URL if you need to; this can be a path or a fully qualified URL. Just leave it blank for the canonical URL to be set automatically. * **SEO Image Transform** - The image transform to apply to the Site SEO Image. * **Twitter Card Type** - With Twitter Cards, you can attach rich photos and information to Tweets that drive traffic to your website. Users who Tweet links to your content will have a “Card” added to the Tweet that’s visible to all of their followers. * **Twitter Card Image** - This is the image that will be used for display on Twitter Cards for tweets that link to this entry. If no image is specified here, the Site SEO Image will be used for Twitter Cards instead. The image must be in JPG, PNG, or GIF format. * **Twitter Card Image Transform** - The image transform to apply to the Twitter Card Image. Twitter recommends: 120 x 120 pixels minimum size, 1:1 aspect ratio, 1mb max size for Summary Card images, and 280x150 pixels minimum size, 1.86:1 aspect ratio, 1mb max size for Summary Card with Large Image images. * **Facebook OpenGraph Type** - Adding OpenGraph tags to your website influences the performance of your links on social media by allowing you to control what appears when a user posts a link to your content on Facebook. * **Facebook OpenGraph Image** - This is the image that will be used for display on Facebook posts that link to this entry. If no image is specified here, the Site SEO Image will be used for Facebook posts instead. The image must be in JPG, PNG, or GIF format. * **Facebook OpenGraph Image Transform** - The image transform to apply to the Facebook SEO Image. Facebook recommends: 1200 x 630 pixels minimum size, 1.9:1 aspect ratio, 8mb max size. * **Robots** - The [robots meta tag](https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag?hl=en) lets you utilize a granular, page-specific approach to controlling how an individual page should be indexed and served to users in search results. Setting it to a blank value means 'no change'. The **SEO Title**, **SEO Description**, and **SEO Keywords** fields can include tags that output entry properties, such as `{title}` or `{myCustomField}` in them. You can use any Craft `environmentVariables` in these fields in addition to static text, e.g.: This is my {baseUrl} In addition to being able to hold custom data that you enter manually, you can also set the Source that **SEO Title**, **SEO Description**, **SEO Keywords**, and **SEO Image** SEOmatic Meta fields to pull data from to an existing field in your Entry. **SEO Image** only can pull from an existing Assets field, while **SEO Title**, **SEO Description**, and **SEO Keywords** can pull from Text, Rich Text, Tags, and Matrix fields. If you pull from a Matrix field, SEOmatic goes through and concatenates all of the Text & Rich Text fields together (this is useful for **SEO Keywords** generation). The **SEO Keywords** field also allows you to extract keywords automatically from an existing field in your Entry via the `Keywords From Field` Source option. SEOmatic Meta FieldTypes also have default settings that allow you to control what the default settings should be for each meta field, and whether they can be changed by the person editing the entry. ### Entry Meta Properties in your Templates If you're using an `SEOmatic Meta` FieldType in your entries, you can also access the properties of it in your templates. This is useful, for instance, if you're iterating through `craft.entries` and want to be able to access the meta properties of each entry in the loop. Assume that we have an `SEOmatic Meta` FieldType with the handle `seoMeta` in our template, we can do things like: {% for newsItem in craft.entries.section('news').limit(10) %} {{ newsItem.seoMeta.seoTitle }} {{ newsItem.seoMeta.seoDescription }} {{ newsItem.seoMeta.seoKeywords }} {{ newsItem.seoMeta.seoImage }} {% endfor %} In addition, you can do: {% set assetID = newsItem.seoMeta.seoImageId %} ...to get the seoImage's AssetID, and you can also do: {% set newsJsonLD = newsItem.seoMeta.getJsonLD(newsItem) %} ...to get the Main Entity of Page JSON-LD array for the entry, which you can then manipulate, or output via SEOmatic's Twig function: {{ newsJsonLD | renderJSONLD }} ## SEOmetrics Content Analysis The SEOmetrics feature in SEOmatic allows you to analyze your pages to measure the effectiveness of the SEO on them. It can be accessed in two different places, either analyzing arbitrary URLs via the Admin CP, or analyzing specific Entries/Sections via Live Preview. ### SEOmetrics in the Admin CP ![Screenshot](resources/screenshots/seomatic08.png) SEOmetrics Content Analysis will run a variety of tests on your web page, and offer you analysis with helpful tips on how to correct any problems it finds. For each test, there is a `Learn More` link that will offer details on the thing being tested. You can enter any arbitrary URL in the **URL to Analyze** field, even URLs to external websites, should you wish to. You can enter **Focus Keyworks**, comma separated, for an additional analysis of how well optimized your page is for those specific SEO keywords. ### SEOmetrics during Live Preview ![Screenshot](resources/screenshots/seomatic05.png) During Live Preview, a small SEOmatic icon is displayed in the lower-left corner of the Live Preview screen. If you click on it, it will run a variety of tests on your web page, and offer you analysis with helpful tips on how to correct any problems it finds. You can enter **Focus Keyworks**, comma separated, for an additional analysis of how well optimized your page is for those specific SEO keywords. ### Video SEOmetrics in Action: [![Video SEOmetrics in Action](https://img.youtube.com/vi/y7swBbGwEJE/0.jpg)](https://www.youtube.com/watch?v=y7swBbGwEJE) You can disable this feature by setting `displaySeoMetrics` to `false` in the `config.php`, should you wish to not have it displayed. SEOmetrics during Live Preview only works if System Status is set to "on". ## Craft Commerce Product Microdata ![Screenshot](resources/screenshots/seomatic04.png) If an SEOmatic FieldType is attached to a Craft Commerce Product, in addition to rendering the page SEO Meta, it will also generate [Product JSON-LD microdata](https://developers.google.com/structured-data/rich-snippets/products) that describes the product. It does this by pulling values from the `seomaticMeta` settings from the SEOmatic FieldType, as well as by pulling data from the Craft Commerce Product. If you have an SEOmatic FieldType attached to a Craft Commerce Product, `seomaticMainEntityOfPage` array is injected into your page template: {% set seomaticMainEntityOfPage = [ { type: "Product", name: "Romper for a Red Eye", description: "Irresistible to women. Establishes dominance over men. Brad's for Men will release your inner beast with its musky essence.", image: "http://bradsformen.dev/img/site/site_logo.png", logo: "http://bradsformen.dev/img/site/site_logo.png", url: "http://bradsformen.dev/commerce/products/romper-for-a-red-eye", sku: "Romper for a Red Eye", offers: { type: "Offer", url: "http://bradsformen.dev/commerce/products/romper-for-a-red-eye", price: "30.00", priceCurrency: "USD", offeredBy: seomaticIdenity, seller: seomaticIdenity, } } ] %} Since this is just a Twig array, you can alter it as you see fit, and whatever changes you make will be reflected in the JSON-LD that SEOmatic renders via the `{% hook 'seomaticRender' %}` Because of the way that Twig handles arrays, you **must** include every field in the array when doing a `set` or `merge`, otherwise the fields you exclude will not exist. Or if you want to set just one variable in the array, you can use the Twig function [merge](http://twig.sensiolabs.org/doc/filters/merge.html). Because this is an _array_ of Products, you need to do something like this to add to each Product in the array: {% if seomaticMainEntityOfPage is defined %} {% set productBrand = { 'type': 'thing', 'name': product.title } %} {% set tempMainEntityOfPage = [] %} {% for productJsonLd in seomaticMainEntityOfPage %} {% set productJsonLd = productJsonLd | merge({"brand": productBrand }) %} {% set tempMainEntityOfPage = tempMainEntityOfPage |merge([productJsonLd]) %} {% endfor %} {% set seomaticMainEntityOfPage = tempMainEntityOfPage %} {% endif %} You can change these `seomaticMainEntityOfPage` variables in your templates that `extends` your main `layout.twig` template, and due to the Twig rendering order, when `{% hook 'seomaticRender' %}` is called, they'll be populated in your rendered SEO Meta tags. See the section **Dynamic Twig SEO Meta** for more information on how to manipulate SEOmatic variables via Twig. SEOmatic also automatically strips HTML/PHP tags from the variables, and translates HTML entities to ensure that they are properly encoded. ## Main Entity of Page Microdata ![Screenshot](resources/screenshots/seomatic07.png) SEOmatic will automatically generate [Main Entity of Page](http://www.seoskeptic.com/how-to-use-schema-org-v2-0s-mainentityofpage-property/) JSON-LD microdata for Template and Entry SEO Meta. The Main Entity of Page is a more specific, additional type of information that describes the page. This additional JSON-LD structured data entity will be added to your page, more specifically describing the page's content. It is accessible via the `seomaticMainEntityOfPage` Twig variable. If an SEOmatic FieldType is attached to a Craft Commerce Product, SEOmatic will automatically extrapolate information from the Product. Otherwise, you can choose your own Main Entity of Page in the SEOmatic FieldType. SEOmatic fills in the basic information for whatever schema type you set as the Main Entity of Page, but since this is just a Twig array, you can alter it as you see fit, and whatever changes you make will be reflected in the JSON-LD that SEOmatic renders via the `{% hook 'seomaticRender' %}` Because of the way that Twig handles arrays, you **must** include every field in the array when doing a `set` or `merge`, otherwise the fields you exclude will not exist. Here's an example of how you might add a `startDate` to an `Event` schema type: {% if seomaticMainEntityOfPage is defined %} {% set eventStartDate = entry.eventDate %} {% set seomaticMainEntityOfPage = seomaticMainEntityOfPage | merge({'startDate': eventStartDate }) %} {% endif %} Note that `Event` schema types require `startDate` and `location` to be set, which SEOmatic is unable to automatically fill in for you. Additionally, you may want to add more information to any of the schema types used for Main Entity of Page to give search engines more information to add to their knowledge graph. ### Gated or Subscription Content Google recommends the use of JSON-LD Structured Data for [Subscription and paywalled content](https://developers.google.com/search/docs/data-types/paywalled-content). This is strongly encouraged, so that you are not errantly punished for violating Google's [cloaking](https://support.google.com/webmasters/answer/66355) policies or [guidelines](https://support.google.com/webmasters/answer/35769). Whether your content is available only after a free registration process, or it's available only to people who subscribe to your website, it's recommended that you use this markup to help Google understand your content. SEOmatic makes it easy to add this to your `MainEntityOfPage` using markup such as this in your Twig template: ``` {% if seomaticMainEntityOfPage is defined %} {% set seomaticMainEntityOfPage = seomaticMainEntityOfPage | merge({ 'isAccessibleForFree': 'False', 'hasPart': { 'type': 'WebPageElement', 'isAccessibleForFree': 'False', 'cssSelector': '.paywall', } }) %} {% endif %} ``` Where the `.paywall` class is whatever your CSS selector is for blocking access to your content. If you have more then one, you'd do something like: ``` {% if seomaticMainEntityOfPage is defined %} {% set seomaticMainEntityOfPage = seomaticMainEntityOfPage | merge({ 'isAccessibleForFree': 'False', 'hasPart': [ { 'type': 'WebPageElement', 'isAccessibleForFree': 'False', 'cssSelector': '.paywall', }, { 'type': 'WebPageElement', 'isAccessibleForFree': 'False', 'cssSelector': '#blocksContent', } ] }) %} {% endif %} ``` For more information, see Googe's support article [Subscription and paywalled content](https://developers.google.com/search/docs/data-types/paywalled-content). ## Breadcrumbs Microdata ![Screenshot](resources/screenshots/seomatic06.png) SEOmatic will automatically generate [Breadcrumbs](https://developers.google.com/search/docs/data-types/breadcrumbs) JSON-LD microdata that is used by Google to display breadcrumbs on the SERP rich cards. By default, SEOmatic will generate breadcrumbs automatically for `Home` (the name is configurable via `breadcrumbsHomeName` in `config.json`), and every element (category, entry, product, whatever) that has a URI matches the current URL segments. ### Changing Breadcrumbs If you want to do your own custom breadcrumbs, you can set them yourself in the `breadcrumbs` array in the `seomaticMeta` variable like this: {% set myBreadcrumbs = { "Home": "http://nystudio107.dev/", "Books": "http://nystudio107.dev/books/", "Candide": "http://nystudio107.dev/books/candide", } %} {% set seomaticMeta = seomaticMeta | merge({'breadcrumbs': myBreadcrumbs }) %} {% if seomaticMainEntityOfPage is defined and seomaticMainEntityOfPage.type == "WebPage" %} {% set seomaticMainEntityOfPage = seomaticMainEntityOfPage | merge({'breadcrumbs': myBreadcrumbs }) %} {% endif %} Since this is just a Twig array, you can alter it as you see fit, and whatever changes you make will be reflected in the JSON-LD that SEOmatic renders via the `{% hook 'seomaticRender' %}` Because of the way that Twig handles arrays, you **must** include every field in the array when doing a `set` or `merge`, otherwise the fields you exclude will not exist. You can change these `breadcrumbs` variables in your templates that `extends` your main `layout.twig` template, and due to the Twig rendering order, when `{% hook 'seomaticRender' %}` is called, they'll be populated in your rendered SEO Meta tags. See the section **Dynamic Twig SEO Meta** for more information on how to manipulate SEOmatic variables via Twig. SEOmatic also automatically strips HTML/PHP tags from the variables, and translates HTML entities to ensure that they are properly encoded. ### Displaying Breadcrumbs on the Frontend Should you wish to display the breadcrumbs in your front-end templates so that they are visible to the user, you can do that with code like this: <ul class="crumbs"> {% for crumbName, crumbUrl in seomaticMeta.breadcrumbs %} <li class="crumbs"><a href="{{ crumbUrl }}">{{ crumbName }}</a></li> {% endfor %} </ul> ## Dynamic Twig SEO Meta All this SEO is great, but what if you want to generate dynamic SEO in an Twig template, with custom or specific requirements that the SEOmatic FieldType can't handle? SEOmatic makes it easy. SEOmatic populates your templates with the following global variables for SEO Meta: seomaticMeta.seoTitle seomaticMeta.seoDescription seomaticMeta.seoKeywords seomaticMeta.seoImage seomaticMeta.canonicalUrl By default, `seomaticMeta.canonicalUrl` is set to `craft.request.url`. All of the variables are set by a combination of your SEO Site Meta settings, and the SEO Template Meta settings linked to the currently rendered template (if any). These are the primary SEOmatic variables that you will be manipulating in your templates. By the time the various SEOmatic variables are populated into your template, SEOmatic has applied all of the cascading meta from your Site Meta, Template Meta, and Entry Meta. The variables are all set, and will not be manipulated further by SEOmatic, only output. So you can change the variables as you see fit; but it also means that if you change your `seoImage`, for example, it will not change the `og:image`. This is so that you can manipulate them independently. **Important:** Due to the way Twig scoping works, if you `{% include %}` a template, it's given a copy of the current Twig context (variables, etc.), which means that any changes made there are not propagated back to the parent template. So for instance if you `{% include %}` a template that changes some SEOmatic variables, they will **not** be changed in the parent context's scope, so they will not be rendered by SEOmatic. You'll need to modify the SEOmatic variables in a template that `{% extends %}` the main `layout.twig` template or via Twig `embeds`. These work like any other Twig variables; you can output them by doing: {{ seomaticMeta.seoTitle }} If you have a **Twitter Handle**, you'll also get variables that are used to generate your Twitter Card tags: seomaticMeta.twitter.card seomaticMeta.twitter.site seomaticMeta.twitter.creator seomaticMeta.twitter.title seomaticMeta.twitter.description seomaticMeta.twitter.image You'll also get variables that are used to generate your Facebook Open Graph tags: seomaticMeta.og.type seomaticMeta.og.locale seomaticMeta.og.url seomaticMeta.og.title seomaticMeta.og.description seomaticMeta.og.image seomaticMeta.og.site_name seomaticMeta.og.see_also When SEOmatic goes to render the `twitter`, `og` and `article` namespace tags, it iterates through the respective arrays, so you can add, remove, or change any of the key-value pairs in the array, and they will be rendered. Just ensure that the `key` is a valid schema type for the respective meta tags. You can even do fun things like: {% set seomaticMeta = seomaticMeta | merge({ og: { type: seomaticMeta.og.type, locale: seomaticMeta.og.locale, url: entry.url, title: "Some Title", description: entry.summary, image: ['one.jpg', 'two.jpg', 'three.jpg'], site_name: seomaticMeta.og.site_name, see_also: seomaticMeta.og.see_also } }) %} ...and SEOmatic will output 3 `og:image` tags, one for each image in the array. Because of the way that Twig handles arrays, you **must** include every field in the array when doing a `set` or `merge`, otherwise the fields you exclude will not exist. You can also change them all at once like this using the Twig [set](http://twig.sensiolabs.org/doc/tags/set.html) syntax: {% set seomaticMeta = { seoTitle: "Some Title", seoDescription: entry.summary, seoKeywords: "Some,Key,Words", seoImage: seomaticMeta.seoImage, canonicalUrl: entry.url, twitter: { card: seomaticMeta.twitter.card, site: seomaticMeta.twitter.site, creator: seomaticMeta.twitter.creator, title: "Some Title", description: entry.summary, image: seomaticMeta.twitter.image }, og: { type: seomaticMeta.og.type, locale: seomaticMeta.og.locale, url: entry.url, title: "Some Title", description: entry.summary, image: seomaticMeta.og.image, site_name: seomaticMeta.og.site_name, see_also: seomaticMeta.og.see_also } } %} Anywhere we are setting a field to `seomaticMeta.*`, we're setting it to what it already is, essentially saying to leave it unchanged. We do this because Twig requires that you pass in the entire array to the `set` operator. If you're using the `article` OpenGraph type, you'll see an additional `article` namespace array in your `seomaticMeta`: {% set seomaticMeta = { seoTitle: "Some Title", seoDescription: entry.summary, seoKeywords: "Some,Key,Words", seoImage: seomaticMeta.seoImage, canonicalUrl: entry.url, twitter: { card: seomaticMeta.twitter.card, site: seomaticMeta.twitter.site, creator: seomaticMeta.twitter.creator, title: "Some Title", description: entry.summary, image: seomaticMeta.twitter.image }, og: { type: seomaticMeta.og.type, locale: seomaticMeta.og.locale, url: entry.url, title: "Some Title", description: entry.summary, image: seomaticMeta.og.image, site_name: seomaticMeta.og.site_name, see_also: seomaticMeta.og.see_also }, article: { author: "Some Author", publisher: "Some publisher", tag: "some,tags" } } %} Or if you want to set just one variable in the array, you can use the Twig function [merge](http://twig.sensiolabs.org/doc/filters/merge.html): {% set seomaticMeta = seomaticMeta | merge({'seoDescription': entry.summary }) %} Here's an example of how to change just the `image` in Twitter: {% set twitter = seomaticMeta.twitter %} {% set twitter = twitter | merge({'image': someiImage}) %} {% set seomaticMeta = seomaticMeta | merge({'twitter': twitter}) %} ...and here's an example of how to change just the `image` in OpenGraph: {% set og = seomaticMeta.og %} {% set og = og | merge({'image': someiImage}) %} {% set seomaticMeta = seomaticMeta | merge({'og': og}) %} You can change these `seomaticMeta` variables in your templates that `extends` your main `layout.twig` template, and due to the Twig rendering order, when `{% hook 'seomaticRender' %}` is called, they'll be populated in your rendered SEO Meta tags. Some of the `seomaticMeta` variables have character limitations on them, because search engines want to see only the most relevant, succinct information, and will truncate them during processing: * **seomaticMeta.seoTitle** - 70 characters * **seomaticMeta.seoDescription** - 160 characters * **seomaticMeta.seoKeywords** - 200 characters SEOmatic will automatically truncate these variables for you when you set them, so you don't have to worry about the length. It intelligently truncates them on whole-word boundaries, so nothing will get cut off. SEOmatic also automatically strips HTML/PHP tags from the variables, and translates HTML entities to ensure that they are properly encoded. ## Rendering Custom JSON LD Microdata SEOmatic gives you the ability to render an arbitrary [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) object, passed in as an array(). All three of these methods accomplish the same thing: {# Render arbitrary JSON-LD using the 'renderJSONLD' function #} {{ renderJSONLD( JSONLD_ARRAY ) }} {# Render arbitrary JSON-LD using the 'renderJSONLD' filter #} {{ JSONLD_ARRAY | renderJSONLD }} {# Render arbitrary JSON-LD using the 'renderJSONLD' variable #} {% do craft.seomatic.renderJSONLD( JSONLD_ARRAY ) %} The JSONLD_ARRAY should be in the following format in PHP: $myJSONLD = array( "type" => "Corporation", "name" => "nystudio107", "sameAs" => ["https://Twitter.com/nystudio107","https://plus.google.com/+nystudio107"], "address" => array( "type" => 'PostalAddress', "addressCountry" => "US", ), ); The JSONLD_ARRAY should be in the following format in Twig: {% set myJSONLD = { "type": "Corporation", "name": "nystudio107", "sameAs": ["https://Twitter.com/nystudio107","https://plus.google.com/+nystudio107"], "address": { "type": 'PostalAddress', "addressCountry": "US", }, } %} The above arrays will render to the following JSON-LD: <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Corporation", "name": "nystudio107", "sameAs": ["https://Twitter.com/nystudio107","https://plus.google.com/+nystudio107"], "address": { "@type": "PostalAddress", "addressCountry": "US" } } </script> The array can be nested arbitrarily deep with sub-arrays. The first key in the array, and in each sub-array, should be an "type" with a valid [Schema.org](http://Schema.org) type as the value. Because Twig doesn't support array keys with non-alphanumeric characters, SEOmatic transforms the keys "type" into "@type" at render time. Here's a practical example. Let's say you're working on a spiffy new online store using Craft Commerce, and you want to add in some microdata for the products listed in your store, for SEO purposes. You can do something like this: {% set myJSONLD = { type: "Product", name: "Brad's for Men Cologne", image: "http://bradsformen.com/cologne.png", logo: "http://bradsformen.com/cologne_logo.png", description: "Brad Bell's musky essence will intoxicate you.", model: "XQJ-37", offers: { type: "Offer", url: "http://bradsformen.com/cologne", price: "69.99", priceCurrency: "USD", acceptedPaymentMethod: ["CreditCard", "PayPal"], seller: { type: "Corporation", name: "Brad Brands Intl.", url: "http://bradsformen.com" } }, manufacturer: { type: "Organization", name: "Scents Unlimited", url: "http://scentsunlimited.com" }, aggregateRating: { type: "AggregateRating", bestRating: "100", ratingCount: "24", ratingValue: "87" }, } %} {{ myJSONLD | renderJSONLD }} Obviously, you'll want to substitute in variables for the above, e.g.: {% set products = craft.commerce.products.type('normal').find() %} {% for product in products %} {% for variant in products.variants %} {% set myJSONLD = { type: "Product", name: variant.description, image: variant.myProductShot, logo: variant.myProductLogo, description: variant.myProductDescription, model: variant.myProductModel, offers: { type: "Offer", url: product.url, price: variant.price, priceCurrency: "USD", acceptedPaymentMethod: ["CreditCard", "PayPal"], seller: { type: "Corporation", name: seomaticSiteMeta.siteSeoName, url: siteUrl } } } %} {{ myJSONLD | renderJSONLD }} {% endfor %} {% endfor %} There are many other values available for you to use; see the [Product](https://developers.google.com/schemas/reference/types/Product) schema for details. Here's another practical example of custom JSON-LD microdata to generate a `MusicAlbum`: {% set musicAlbumJsonLd = { type: "MusicAlbum", name: entry.albumTitle | escape('html_attr'), image: entry.albumArtwork.first().url |default(seomaticMeta.seoImage), description: entry.albumDescription | escape('html_attr'), url: seomaticMeta.canonicalUrl, albumProductionType: 'studio album', datePublished: entry.postDate.iso8601(), sameAs: [entry.amazonLink, entry.appleMusicLink, entry.itunesLink, entry.spotifyLink] } %} {% set musicAlbumJsonLd = musicAlbumJsonLd | merge({"author": seomaticIdentity}) %} {% set musicAlbumJsonLd = musicAlbumJsonLd | merge({"creator": seomaticIdentity}) %} {% set musicAlbumJsonLd = musicAlbumJsonLd | merge({"byArtist": seomaticIdentity}) %} {{ musicAlbumJsonLd | renderJSONLD }} Additional information links: * [Google Structured Data](https://developers.google.com/structured-data/) * [Google Schemas reference](https://developers.google.com/schemas/reference/) * [Schema.org Schemas reference](http://schema.org/docs/schemas.html) ## Dynamic Keyword Generation Generating good keywords from dynamic data is a pain; to this end, SEOmatic uses the [TextRank](https://github.com/crodas/TextRank) PHP library to generate high quality keywords from arbitrary text data. All three of these methods accomplish the same thing: {# Extract keywords using the 'extractKeywords' function #} {{ extractKeywords( TEXT, LIMIT ) }} {# Extract keywords using the 'extractKeywords' filter #} {{ TEXT | extractKeywords( LIMIT ) }} {# Extract keywords using the 'extractKeywords' variable #} {% do craft.seomatic.extractKeywords( TEXT, LIMIT ) %} **TEXT** is the text to extract the keywords from, and the optional **LIMIT** parameter specifies the maximum number of keywords to return (the default is 15). Here's an example use of the `extractKeywords()` function: {{ extractKeywords('Scientists have developed a gel that helps brains recover from traumatic injuries. It has the potential to treat head injuries suffered in combat, car accidents, falls, or gunshot wounds. Developed by Dr. Ning Zhang at Clemson University in South Carolina, the gel is injected in liquid form at the site of injury and stimulates the growth of stem cells there. Brain injuries are particularly hard to repair, since injured tissues swell up and can cause additional damage to the cells. So far, treatments have tried to limit this secondary damage by lowering the temperature or relieving the pressure at the site of injury. However, these techniques are often not very effective. More recently, scientists have considered transplanting donor brain cells into the wound to repair damaged tissue. This method has so far had limited results when treating brain injuries. The donor cells often fail to grow or stimulate repair at the injury site, possibly because of the inflammation and scarring present there. The injury site also typically has very limited blood supply and connective tissue, which might prevent donor cells from getting the nutrients they require. Dr. Zhangs gel, however, can be loaded with different chemicals to stimulate various biological processes at the site of injury. In previous research done on rats, she was able to use the gel to help re-establish full blood supply at the site of brain injury. This could help create a better environment for donor cells. In a follow-up study, Dr. Zhang loaded the gel with immature stem cells, as well as the chemicals they needed to develop into full-fledged adult brain cells. When rats with severe brain injuries were treated with this mixture for eight weeks, they showed signs of significant recovery. The new gel could treat patients at varying stages following injury, and is expected to be ready for testing in humans in about three years.') }} This will output the following: injury site, brain cells, brain injuries, donor cells, donor brain cells, injury, site of injury, site, cells, brain, injuries, repair, donor, damage to the cells, blood So tying it all together, you might do something like this for a dynamic Blog entry: {% set seomaticMeta = { seoTitle: entry.title, seoDescription: entry.summary, seoKeywords: extractKeywords(entry.blog), seoImage: entry.image.url, canonicalUrl: seomaticMeta.canonicalUrl, twitter: { card: seomaticMeta.twitter.card, site: seomaticMeta.twitter.site, creator: seomaticMeta.twitter.creator, title: entry.title, description: entry.summary, image: entry.image.url }, og: { type: seomaticMeta.og.type, locale: seomaticMeta.og.locale, url: entry.url, title: entry.title, description: entry.summary, image: entry.image.url, site_name: seomaticMeta.og.site_name, see_also: seomaticMeta.og.see_also } } %} And there you have it, dynamic keywords for your SEO Meta. Note that we set the `canonicalUrl` to `seomaticMeta.canonicalUrl`, effectively leaving it unchanged. Anywhere we are setting a field to `seomaticMeta.*`, we're setting it to what it already is, essentially saying to leave it unchanged. We do this because Twig requires that you pass in the entire array to the `set` operator. ## Dynamic Summary Generation Generating a good summary from dynamic data is also a pain; to this end, SEOmatic uses the [TextRank](https://github.com/crodas/TextRank) PHP library to generate a summary from arbitrary text data. All three of these methods accomplish the same thing: {# Extract a summary using the 'extractSummary' function #} {{ extractSummary( TEXT, LIMIT ) }} {# Extract a summary using the 'extractSummary' filter #} {{ TEXT | extractSummary( LIMIT ) }} {# Extract a summary using the 'extractSummary' variable #} {% do craft.seomatic.extractSummary( TEXT, LIMIT ) %} **TEXT** is the text to extract the summary from, and the optional **LIMIT** parameter specifies the maximum number of characters to return. The Summary is returns is at most 5% of the sentences of the text. **Caveats** - This feature of TextRank seems to be best suited for large amounts of text. It attempts to pick out the most relevant whole sentences based on statistical analysis. The result may end up being too long to be useful for an `seoDescription` in some cases. So tying it all together, you might do something like this for a dynamic Blog entry: {% set seomaticMeta = { seoTitle: entry.title, seoDescription: extractSummary(entry.blog), seoKeywords: extractKeywords(entry.blog), seoImage: entry.image.url, canonicalUrl: seomaticMeta.canonicalUrl, twitter: { card: seomaticMeta.twitter.card, site: seomaticMeta.twitter.site, creator: seomaticMeta.twitter.creator, title: entry.title, description: extractSummary(entry.blog), image: entry.image.url }, og: { type: seomaticMeta.og.type, locale: seomaticMeta.og.locale, url: entry.url, title: entry.title, description: extractSummary(entry.blog), image: entry.image.url, site_name: seomaticMeta.og.site_name, see_also: seomaticMeta.og.see_also } } %} Note that we set the `canonicalUrl` to `seomaticMeta.canonicalUrl`, effectively leaving it unchanged. Anywhere we are setting a field to `seomaticMeta.*`, we're setting it to what it already is, essentially saying to leave it unchanged. We do this because Twig requires that you pass in the entire array to the `set` operator. ## Humans.txt authorship [Humans.txt](http://humanstxt.org) is an initiative for knowing the people behind a website. It's a TXT file that contains information about the different people who have contributed to building the website. SEOmatic automatically generates [Humans.txt](http://humanstxt.org) authorship accreditation with the following tag: <link type="text/plain" rel="author" href="/humans.txt" /> The rendered `humans.txt` file uses the following template by default (you're free to change it as you wish): /* TEAM */ {% if seomaticCreator.name is defined and seomaticCreator.name %} Creator: {{ seomaticCreator.name }} {% endif %} {% if seomaticCreator.url is defined and seomaticCreator.url %} URL: {{ seomaticCreator.url }} {% endif %} {% if seomaticCreator.description is defined and seomaticCreator.description %} Description: {{ seomaticCreator.description }} {% endif %} /* THANKS */ Pixel & Tonic - https://pixelandtonic.com /* SITE */ Standards: HTML5, CSS3 Components: Craft CMS, Yii, PHP, Javascript, SEOmatic ## Utility Filters & Functions SEOmatic exposes a few useful utility filters & functions that you can use... or not. ### truncateStringOnWord() All three of these methods accomplish the same thing: {# Truncate a string on word boundaries using the 'truncateStringOnWord' function #} {{ truncateStringOnWord( THESTRING, DESIREDLENGTH ) }} {# Truncate a string on word boundaries using the 'truncateStringOnWord' filter #} {{ THESTRING | truncateStringOnWord( DESIREDLENGTH ) }} {# Truncate a string on word boundaries using the 'truncateStringOnWord' variable #} {% do craft.seomatic.truncateStringOnWord( THESTRING, DESIREDLENGTH ) %} **THESTRING** is the string to be truncated, and the optional **DESIREDLENGTH** parameter specifies the desired length in characters. The returned string will be broken on a whole-word boundary, with an … appended to the end if it is truncated. You shouldn't need to use truncateStringOnWord() for SEO Meta like `seoTitle` & `seoDescription` that have character limitations, because SEOmatic will truncate them for you automatically. However you may find this function handy for other purposes. ### extractTextFromMatrix() All three of these methods accomplish the same thing: {# Extract all and concatenate all of the text fields from a Matrix block using the 'extractTextFromMatrix' function #} {{ extractTextFromMatrix( THEMATRIXBLOCK ) }} {# Extract all and concatenate all of the text fields from a Matrix block using the 'extractTextFromMatrix' filter #} {{ THEMATRIXBLOCK | extractTextFromMatrix() }} {# Extract all and concatenate all of the text fields from a Matrix block using the 'extractTextFromMatrix' variable #} {% do craft.seomatic. extractTextFromMatrix( THEMATRIXBLOCK ) %} **THEMATRIXBLOCK** is the Matrix block to extract text from. It iterates through all of the 'Text' and 'Rich Text' fields in a Matrix block, and concatenates the text together for you. This is a useful precursor for the `extractKeywords()` function. ### encodeEmailAddress() All three of these methods accomplish the same thing: {# Ordinal-encode an email address to obfuscate it using the 'encodeEmailAddress' function #} {{ encodeEmailAddress( EMAILADDRESS ) }} {# Ordinal-encode an email address to obfuscate it using the 'encodeEmailAddress' filter #} {{ EMAILADDRESS | encodeEmailAddress() }} {# Ordinal-encode an email address to obfuscate it using the 'encodeEmailAddress' variable #} {% do craft.seomatic.encodeEmailAddress( EMAILADDRESS ) %} **EMAILADDRESS** is the email address to be ordinal-encoded. For instance, `info@nystudio107.com` becomes: info@nystudio107.com Google can still properly decode email addresses that are ordinal-encoded, it's still readable by humans when displayed, but it prevents some bots from recognizing it as an email address. ### getLocalizedUrls() Returns an array of localized URLs for the current page request. This handles elements with localized slugs, etc. This function returns the unique URLs for each language for the current page request, not just the localized site URLs. Both of these methods accomplish the same thing: {# Get an array of localized URLs for the current request using the 'getLocalizedUrls' function #} {% set myLocalizedUrls = getLocalizedUrls() }} {# Get an array of localized URLs for the current request using the 'getLocalizedUrls' variable #} {% set myLocalizedUrls = craft.seomatic.getLocalizedUrls() %} You'll be returned an array that looks like this: { 'en': 'http://nystudio107.dev/', 'el_gr': 'http://nystudio107.dev/gr/' } With a key/value pair for each language your site is localized in, in the order you have them set in the AdminCP. This makes it very easy to create a "language switcher" menu. ### getFullyQualifiedUrl() All three of these methods accomplish the same thing: {# Get a fully qualified URL based on the siteUrl using the 'getFullyQualifiedUrl' function #} {{ getFullyQualifiedUrl( URLPATH ) }} {# Get a fully qualified URL based on the siteUrl using the 'getFullyQualifiedUrl' filter #} {{ URLPATH | getFullyQualifiedUrl }} {# Get a fully qualified URL based on the siteUrl using the 'getFullyQualifiedUrl' variable #} {% do craft.seomatic.getFullyQualifiedUrl( URLPATH ) %} **URLPATH** is either a URL (in which case it is just returned) or a path, in which case it is combined with the `siteUrl` and returned. ## SEOmatic Site Meta Twig Variables SEOmatic populates your templates with the following global variables for Site Meta: seomaticSiteMeta.siteSeoName seomaticSiteMeta.siteSeoTitle seomaticSiteMeta.siteSeoDescription seomaticSiteMeta.siteSeoKeywords seomaticSiteMeta.siteSeoImage seomaticSiteMeta.siteOwnerType All of the variables are from your SEO Site Meta settings, and will be the same for every template rendered. They are for the most part very similar to your SEO Meta variables, but they do not change from template to template: they are site-wide. Mostly, you won't need to change them in your Twig templates, but it can be useful to reference or output them. These work like any other Twig variables; you can output them by doing: {{ seomaticSiteMeta.siteSeoName }} You can also change these variables the same way you change the "Dynamic Twig SEO Meta" (using Twig `set` and `merge`), but in practice they typically will just be set in the SEOmatic **SEO Site Meta** settings page in the Admin CP. SEOmatic also automatically strips HTML/PHP tags from the variables, and translates HTML entities to ensure that they are properly encoded. ## SEOmatic Site Identity Twig Variables SEOmatic populates your templates with an array of Site Identity variables; see the **Rendered Identity Microdata** section for a complete listing of them. All of the variables are from your Site Identity settings, and will be the same for every template rendered. Mostly, you won't need to change them in your Twig templates, but it can be useful to reference or output them. These work like any other Twig variables; you can output them by doing: {{ seomaticIdentity.name }} You can also change these variables the same way you change the "Dynamic Twig SEO Meta" (using Twig `set` and `merge`), but in practice they typically will just be set in the SEOmatic **Site Identity** settings page in the Admin CP. Because the `seomaticIdentity` array is directly translated into JSON-LD, you can manipulate it via Twig to modify or add to the JSON-LD. For example, let's say you want to add a [Brand](https://schema.org/Brand) to your [Corporation](https://schema.org/Corporation)-type Identity JSON-LD: {% set myBrand = { type: "Brand", name: "Brad's for Men", description: "Brad Bell's musky essence will intoxicate you.", url: "http://bradsformen.com", logo: "http://bradsformen.com/logo.png", image: "http://bradsformen.com/lifestyle.jpg", } %} {% set seomaticIdentity = seomaticIdentity | merge({'brand': myBrand }) %} SEOmatic also automatically strips HTML/PHP tags from the variables, and translates HTML entities to ensure that they are properly encoded. The `email` variable is ordinal-encoded to obfuscate it. For instance, `info@nystudio107.com` becomes: info@nystudio107.com ## SEOmatic Social Media Twig Variables SEOmatic populates your templates with the following global variables for Social Media: seomaticSocial.twitterHandle seomaticSocial.facebookHandle seomaticSocial.facebookProfileId seomaticSocial.linkedInHandle seomaticSocial.googlePlusHandle seomaticSocial.googleSiteVerification seomaticSocial.youtubeHandle seomaticSocial.instagramHandle seomaticSocial.pinterestHandle All of the variables are from your Social Media settings, and will be the same for every template rendered. Mostly, you won't need to change them in your Twig templates, but it can be useful to reference or output them. These work like any other Twig variables; you can output them by doing: {{ seomaticSocial.twitterHandle }} You can also change these variables the same way you change the "Dynamic Twig SEO Meta" (using Twig `set` and `merge`), but in practice they typically will just be set in the SEOmatic **Social Media** settings page in the Admin CP. SEOmatic also automatically strips HTML/PHP tags from the variables, and translates HTML entities to ensure that they are properly encoded. ## SEOmatic Site Creator Twig Variables SEOmatic populates your templates with an array of Site Creator variables; see the **Rendered WebSite Microdata** section for a complete listing of them. All of the variables are from your Site Creator settings, and will be the same for every template rendered. Mostly, you won't need to change them in your Twig templates, but it can be useful to reference or output them. These work like any other Twig variables; you can output them by doing: {{ seomaticCreator.name }} You can also change these variables the same way you change the "Dynamic Twig SEO Meta" (using Twig `set` and `merge`), but in practice they typically will just be set in the SEOmatic **Site Creator** settings page in the Admin CP. Because the `seomaticCreator` array is directly translated into JSON-LD, you can manipulate it via Twig to modify or add to the JSON-LD. For example, let's say you want to add an `affiliation` to your [Person](https://schema.org/Person)-type Creator JSON-LD: {% set myAffiliation = { type: "Organization", name: "nystudio107", description: "Impeccable design married with precision craftsmanship.", url: "http://nystudio107.com", } %} {% set seomaticCreator = seomaticCreator | merge({'affiliation': myAffiliation }) %} SEOmatic also automatically strips HTML/PHP tags from the variables, and translates HTML entities to ensure that they are properly encoded. The `email` variable is ordinal-encoded to obfuscate it. For instance, `info@nystudio107.com` becomes: info@nystudio107.com ## SEOmatic Helper Twig Variables SEOmatic populates your templates with the following "helper" variables for that you can use in your templates: seomaticHelper.twitterUrl seomaticHelper.facebookUrl seomaticHelper.googlePlusUrl seomaticHelper.linkedInUrl seomaticHelper.youtubeUrl, seomaticHelper.youtubeChannelUrl seomaticHelper.instagramUrl seomaticHelper.pinterestUrl seomaticHelper.githubUrl seomaticHelper.vimeoUrl seomaticHelper.wikipediaUrl seomaticHelper.ownerGoogleSiteVerification seomaticHelper.ownerBingSiteVerification seomaticHelper.ownerGoogleAnalyticsUID seomaticHelper.ownerGoogleTagManagerID seomaticHelper.googleAnalyticsSendPageview seomaticHelper.googleAnalyticsAdvertising seomaticHelper.googleAnalyticsEcommerce seomaticHelper.googleAnalyticsEEcommerce seomaticHelper.googleAnalyticsLinkAttribution seomaticHelper.googleAnalyticsLinker seomaticHelper.googleAnalyticsAnonymizeIp seomaticHelper.ownerCopyrightNotice seomaticHelper.ownerAddressString seomaticHelper.ownerAddressHtml seomaticHelper.ownerMapUrl seomaticHelper.creatorCopyrightNotice seomaticHelper.creatorAddressString seomaticHelper.creatorAddressHtml seomaticHelper.creatorMapUrl ## Previewing your SEO Meta There's a lot going on here, so to make it all more easily understood, SEOmatic offers two ways to preview your SEO Meta. You have to **Save** the settings first before you preview them; a "Live Preview" feature is on the wish list for future versions. ### Preview SEO Meta Display ![Screenshot](resources/screenshots/seomatic02.png) Clicking on the **Preview SEO Meta Display** button will show you a preview of what the rendered SEO Meta will look like to various services that scrape your SEO Meta tags, such as Google, Twitter, and Facebook. This serves as a nice sanity check for you, and a very nice way to show clients the amazing job you did on their SEO strategy. If you click on the **Preview SEO Meta Display** button when you are editing a SEO Template Meta, you'll see the result of that particular template's SEO Template Meta tags. Otherwise, you will see the SEO Site Meta tags. ### Preview SEO Meta Tags Clicking on the **Preview SEO Meta Tags** button will show you Twig/HTML output of the following things: #### Meta Template Variables These are the Twig variables that SEOmatic pre-populates, and makes available to you in your templates. They are used when rendering the SEO Meta, so you can manipulate them however you want before rendering your SEO Meta. For example, you might change the `seomaticMeta.seoDescription` to be the summary field of an entry. {% set seomaticMeta = { seoTitle: "We make the big stuff big & the little stuff little", seoDescription: "Big Entity specializes in making the big stuff big, but we also know how to make the little stuff little!", seoKeywords: "colossal,considerable,enormous,fat,full,gigantic,hefty,huge,immense,massive,sizable,substantial,tremendous,", seoImage: "http://nystudio107.dev/img/site/big_hq.jpg", canonicalUrl: "http://nystudio107.dev/", twitter: { card: "summary_large_image", site: "@nystudio107", creator: "@nystudio107", title: "We make the big stuff big & the little stuff little | Big Entity, Inc.", description: "Big Entity specializes in making the big stuff big, but we also know how to make the little stuff little!", image: "http://nystudio107.dev/img/site/big_hq.jpg" }, og: { type: "website", locale: "en", url: "http://nystudio107.dev/admin/seomatic/social", title: "We make the big stuff big & the little stuff little | Big Entity, Inc.", description: "Big Entity specializes in making the big stuff big, but we also know how to make the little stuff little!", image: "http://nystudio107.dev/img/site/big_hq.jpg", site_name: "Big Entity, Inc.", see_also: ["https://twitter.com/nystudio107","https://www.facebook.com/nystudio107","https://plus.google.com/+nystudio107","https://www.linkedin.com/company/nystudio107","https://www.youtube.com/user/nystudio107","https://www.instagram.com/nystudio107","https://www.pinterest.com/nystudio107"] } } %} {% set seomaticHelper = { twitterUrl: "https://twitter.com/nystudio107", facebookUrl: "https://www.facebook.com/nystudio107", googlePlusUrl: "https://plus.google.com/+nystudio107", linkedInUrl: "https://www.linkedin.com/company/nystudio107", youtubeUrl: "https://www.youtube.com/user/nystudio107", instagramUrl: "https://www.instagram.com/nystudio107", pinterestUrl: "https://www.pinterest.com/nystudio107", ownerGoogleSiteVerification: "BM6VkEojTIASDEWyTLro7VNhZnW_036LNdcYk5j9X_8g", ownerCopyrightNotice: "Copyright ©2015 Big Entity, Inc. All rights reserved.", ownerAddressString: "Big Entity, Inc., 123 Some Road, Porchester, NY 11450, USA", ownerAddressHtml: "Big Entity, Inc.<br />123 Some Road<br />Porchester, NY 11450<br />USA<br />", ownerMapUrl: "http://maps.google.com/maps?q=Big+Entity%2C+Inc.%2C+123+Some+Road%2C+Porchester%2C+NY+11450%2C+USA", creatorCopyrightNotice: "Copyright ©2015 NY Studio 107. All rights reserved.", creatorAddressString: "", creatorAddressHtml: "", creatorMapUrl: "" } %} {% set seomaticSiteMeta = { siteSeoName: "Big Entity, Inc.", siteSeoTitle: "We make the big stuff big & the little stuff little", siteSeoDescription: "Big Entity specializes in making the big stuff big, but we also know how to make the little stuff little!", siteSeoKeywords: "colossal,considerable,enormous,fat,full,gigantic,hefty,huge,immense,massive,sizable,substantial,tremendous,", siteSeoImage: "http://nystudio107.dev/img/site/big_hq.jpg" } %} {% set seomaticSocial = { twitterHandle: "nystudio107", facebookHandle: "nystudio107", facebookProfileId: "642246343", linkedInHandle: "nystudio107", googlePlusHandle: "nystudio107", youtubeHandle: "nystudio107", instagramHandle: "nystudio107", pinterestHandle: "nystudio107" } %} {% set seomaticIdentity = { type: "Corporation", name: "Big Entity, Inc.", alternateName: "Big", description: "We sell only big stuff... but we'll sell you little stuff too, but only in bulk containers of 1,000 units per container. So then it's big too.", url: "http://BigEntity.com", image: "http://nystudio107.dev/img/site/big_logo.jpg", telephone: "585.214.9439", email: "info@BigEntity.com", address: { type: "PostalAddress", streetAddress: "123 Some Road", addressLocality: "Porchester", addressRegion: "NY", postalCode: "11450", addressCountry: "US" }, logo: "http://nystudio107.dev/img/site/big_logo.jpg", location: { type: "Place", name: "Big Entity, Inc.", alternateName: "Big", description: "We sell only big stuff... but we'll sell you little stuff too, but only in bulk containers of 1,000 units per container. So then it's big too.", hasMap: "http://maps.google.com/maps?q=Big+Entity%2C+Inc.%2C+123+Some+Road%2C+Porchester%2C+NY+11450%2C+USA", geo: { type: "GeoCoordinates", latitude: "-10.447525", longitude: "105.690449" }, address: { type: "PostalAddress", streetAddress: "123 Some Road", addressLocality: "Porchester", addressRegion: "NY", postalCode: "11450", addressCountry: "US" } }, duns: "12345678", founder: "Mr. Big", foundingDate: "10/2011", foundingLocation: "Redding, CT", tickerSymbol: "BGE" } %} {% set seomaticCreator = { type: "Corporation", name: "NY Studio 107", alternateName: "nystudio107", description: "Impeccable design married with precision craftsmanship", url: "http://nystudio107.com", image: "http://nystudio107.dev/img/site/nys_seo_logo.png", email: "info@nystudio107.com", address: { type: "PostalAddress", addressLocality: "Webster", addressRegion: "NY", postalCode: "14580", addressCountry: "US" }, logo: "http://nystudio107.dev/img/site/nys_seo_logo.png", location: { type: "Place", name: "NY Studio 107", alternateName: "nystudio107", description: "Impeccable design married with precision craftsmanship", geo: { type: "GeoCoordinates", latitude: "43.11558", longitude: "-77.59647199999999" }, address: { type: "PostalAddress", addressLocality: "Webster", addressRegion: "NY", postalCode: "14580", addressCountry: "US" } } } %} {% set seomaticTemplatePath = "" %} You can treat all of these like regular Twig variables; for instance, `{{ seomaticHelper.twitterUrl }}` will output the URL to the website's Twitter page. You can change these variables using the Twig array [set](http://twig.sensiolabs.org/doc/tags/set.html) syntax, or using the Twig function [merge](http://twig.sensiolabs.org/doc/filters/merge.html). Any changes you make will be reflected in the SEO Meta rendered with `{% hook 'seomaticRender' %}` on your page. #### Rendered SEO Meta The `{% hook 'seomaticRender' %}` tag generates these SEO Meta for you, based on the Meta Template Variables (above). By default, it uses an internal template, but you can pass your own template to be used instead, like this: `{% set seomaticTemplatePath = 'path/template' %} {% hook 'seomaticRender' %}` SEOmatic cascades Meta settings; if you have a Meta associated with the current template, it uses that. Otherwise it falls back on the SEO Site Meta settings. If a field is empty for a Template Meta, it falls back on the SEO Site Meta setting for that field. <!-- BEGIN SEOmatic rendered SEO Meta --> <title>[devMode] We make the big stuff big & the little stuff… | Big Entity, Inc. #### Rendered Identity Microdata The `{% hook 'seomaticRender' %}` tag also generates [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) identity microdata that tells search engines about the company that owns the website. JSON-LD is an alternative to microdata you may already be familiar with, such as: `
`. JSON-LD has the advantage of not being intertwined with HTML markup, so it's easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess. #### Rendered WebSite Microdata The `{% hook 'seomaticRender' %}` tag also generates [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) WebSite microdata that tells search engines about the website. JSON-LD is an alternative to microdata you may already be familiar with, such as: `
`. JSON-LD has the advantage of not being intertwined with HTML markup, so it's easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess. #### Rendered Place Microdata The `{% hook 'seomaticRender' %}` tag also generates [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) Place microdata for Organizations that tells search engines where the organization is located. JSON-LD is an alternative to microdata you may already be familiar with, such as: `
`. JSON-LD has the advantage of not being intertwined with HTML markup, so it's easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess. #### Rendered Product Microdata The `{% hook 'seomaticRender' %}` tag also generates [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) Product microdata if an SEOmatic FieldType is attached to a Craft Commerce Product. JSON-LD is an alternative to microdata you may already be familiar with, such as: `
`. JSON-LD has the advantage of not being intertwined with HTML markup, so it's easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess. If you click on the **Preview SEO Meta Tags** button when you are editing a SEO Template Meta, you'll see that particular template's SEO Template Meta tags. Otherwise, you will see the SEO Site Meta tags. ## Testing Your SEO Meta Use Google's [Structured Data Testing Tool](https://developers.google.com/structured-data/testing-tool/) to view your metadata/microdata as Google sees it, and validate it for accuracy. Use Facebook's [Open Graph Debugger](https://developers.facebook.com/tools/debug) to validate and verify your Open Graph meta tags. Use Twitter's [Twitter Card Validator](https://cards-dev.twitter.com/validator) to validate and verify your Twitter Cards. ================================================ FILE: LICENSE.txt ================================================ The SEOmatic License Copyright (c) 2015 nystudio107 Permission is hereby granted, free of charge, to any person or entity obtaining a copy of this software and associated documentation files (the "Software"), to use the software in any capacity, including commercial and for-profit use. Permission is also granted to alter, modify, or extend the Software for your own use, or commission a third-party to perform modifications for you. Permission is NOT granted to create derivative works, sublicense, and/or sell copies of the Software. This is not FOSS software. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ [![No Maintenance Intended](http://unmaintained.tech/badge.svg)](http://unmaintained.tech/) # DEPRECATED This Craft CMS 2.x plugin is no longer supported, but it is fully functional, and you may continue to use it as you see fit. The license also allows you to fork it and make changes as needed for legacy support reasons. The Craft CMS 3.x version of this plugin can be found here: [craft-seomatic](https://github.com/nystudio107/craft-seomatic) and can also be installed via the Craft Plugin Store in the Craft CP. # SEOmatic plugin for Craft A turnkey SEO implementation for Craft CMS that is comprehensive, powerful, and flexible. ![Screenshot](resources/screenshots/seomatic01.png) Related: [SEOmatic for Craft 3.x](https://github.com/nystudio107/craft-seomatic) ## Installation To install SEOmatic, follow these steps: 1. Download & unzip the file and place the `seomatic` directory into your `craft/plugins` directory 2. -OR- do a `git clone https://github.com/nystudio107/seomatic.git` directly into your `craft/plugins` folder. You can then update it with `git pull` 3. -OR- install with Composer via `composer require nystudio107/seomatic` 4. Install plugin in the Craft Control Panel under Settings > Plugins 5. The plugin folder should be named `seomatic` for Craft to see it. GitHub recently started appending `-master` (the branch name) to the name of the folder for zip file downloads. SEOmatic works on Craft 2.4.x, Craft 2.5.x, and Craft 2.6.x. The SEOmetrics feature requires PHP 5.4 or later and that you have the [php-xml extension](http://osticket.com/forum/discussion/8702/php-fatal-error-call-to-undefined-function-utf8-encode-error-message) installed. ## Overview Learn more about SEO: [Modern SEO: Snake Oil vs. Substance](https://nystudio107.com/blog/modern-seo-snake-oil-vs-substance) Learn more about JSON-LD Structured Data: [JSON-LD, Structured Data and Erotica](https://nystudio107.com/blog/json-ld-structured-data-and-erotica) ### Video overview of SEOmatic: [![Video Overview of SEOmatic](https://img.youtube.com/vi/f1149YVEF_0/0.jpg)](https://www.youtube.com/watch?v=f1149YVEF_0) SEOmatic allows you to quickly get a website up and running with a robust, comprehensive SEO strategy. It is also implemented in a Craft-y way, in that it is also flexible and customizable. The SEOmetrics feature scans your content for focus keywords, and offers analysis on how to improve your SEO. It implements [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata, [Dublin Core](http://dublincore.org) core metadata, [Twitter Cards](https://dev.twitter.com/cards/overview) tags, [Facebook OpenGraph](https://developers.facebook.com/docs/sharing/opengraph) tags, [Humans.txt](http://humanstxt.org) authorship accreditation, and as well as HTML meta tags. The general philosophy is that SEO Site Meta can be overridden by SEO Template Meta, which can be overridden by SEO Entry Meta, which can be overridden by dynamic SEO Twig tags. In this way, the SEO Meta tags on your site cascade, so that they are globally available, but also can be customized in a very granular way. SEOmatic populates your templates with SEO Meta in the same way that Craft populates your templates with `entry` variables, with a similar level of freedom and flexibility in terms of how you utilize them. SEOmatic also caches each unique SEO Meta request so that your website performance is minimally impacted by the rich SEO Meta tags provided. ## Documentation Please read the complete documentation in the [SEOmatic Wiki](https://github.com/nystudio107/seomatic/wiki) or read the `DOCS.md` file in the repo. To better understand how all of this metadata benefits your website, please read: [Promote Your Content with Structured Data Markup](https://developers.google.com/structured-data/) If you need to redirect from legacy URLs to preserve SEO value when rebuilding & restructuring a website, check out the [Retour Plugin](https://github.com/nystudio107/retour) ## Roadmap Some things to do, and ideas for potential features: * [bug] Get the Template Metas implemented with full `locale` support, so the settings can all be per-locale based * [bug] Enforce *required fields on the various settings pages in the Admin CP by doing proper validation * [bug] The `foundingDate` fields probably should be dateTimeField types on the Settings pages * [feature] Provide SiteMap functionality. Yes, it's SEO-related, but seems like it might be better to keep SEOmatic focused (?) * [feature] Allow people to choose individual fields to pull from inside of Matrix and Neo blocks Brought to you by [nystudio107](http://nystudio107.com) ================================================ FILE: SeomaticPlugin.php ================================================ getSettings()->getAttribute('pluginNameOverride'); return empty($pluginNameOverride) ? Craft::t('SEOmatic') : $pluginNameOverride; } public function getDescription() { return 'A turnkey SEO implementation for Craft CMS that is comprehensive, powerful, and flexible.'; } public function getDocumentationUrl() { return 'https://github.com/nystudio107/seomatic/wiki'; } public function getReleaseFeedUrl() { return 'https://raw.githubusercontent.com/nystudio107/seomatic/master/releases.json'; } public function getVersion() { return '1.1.56'; } public function getSchemaVersion() { return '1.1.25'; } public function getDeveloper() { return 'nystudio107'; } public function getDeveloperUrl() { return 'https://nystudio107.com'; } public function hasCpSection() { return true; } public function init() { require_once __DIR__ . '/vendor/autoload.php'; craft()->templates->hook('seomaticRender', function(&$context) { if ((craft()->request->isSiteRequest()) && (isset($context['seomaticMeta']))) { $locale = craft()->language; $seomaticMeta = $context['seomaticMeta']; $seomaticSiteMeta = $context['seomaticSiteMeta']; $seomaticIdentity = $context['seomaticIdentity']; $seomaticSocial = $context['seomaticSocial']; $seomaticCreator = $context['seomaticCreator']; $seomaticHelper = $context['seomaticHelper']; $dataLayer = null; if (!empty($context['dataLayer'])) { $dataLayer = $context['dataLayer']; } /* -- We want to pass an up-to-date variable context to the template, so pass everything on in */ $result=""; $metaVars = array( 'seomaticMeta' => $seomaticMeta, 'seomaticSiteMeta' => $seomaticSiteMeta, 'seomaticIdentity' => $seomaticIdentity, 'seomaticSocial' => $seomaticSocial, 'seomaticCreator' => $seomaticCreator, 'seomaticHelper' => $seomaticHelper, 'dataLayer' => $dataLayer, ); /* -- Main Entity of Page info, which is optional */ if (isset($context['seomaticMainEntityOfPage'])) $metaVars['seomaticMainEntityOfPage'] = $context['seomaticMainEntityOfPage']; /* -- Render the seomaticMeta, this is where the magic happens */ $seomaticTemplatePath = ''; if (isset($context['seomaticTemplatePath'])) $seomaticTemplatePath = $context['seomaticTemplatePath']; $result = craft()->seomatic->renderSiteMeta($seomaticTemplatePath, $metaVars, $locale); return $result; } }); } public function addTwigExtension() { Craft::import('plugins.seomatic.twigextensions.SeomaticTwigExtension'); return new SeomaticTwigExtension(); } public function registerSiteRoutes() { return array( 'humans.txt' => array('action' => 'seomatic/renderHumans'), 'robots.txt' => array('action' => 'seomatic/renderRobots'), ); } public function registerCpRoutes() { return array( 'seomatic/site' => array('action' => 'seomatic/editSiteMeta'), 'seomatic/site/(?P[-\w\.*]+)' => array('action' => 'seomatic/editSiteMeta'), 'seomatic/identity' => array('action' => 'seomatic/editIdentity'), 'seomatic/identity/(?P[-\w\.*]+)' => array('action' => 'seomatic/editIdentity'), 'seomatic/social' => array('action' => 'seomatic/editSocial'), 'seomatic/social/(?P[-\w\.*]+)' => array('action' => 'seomatic/editSocial'), 'seomatic/creator' => array('action' => 'seomatic/editCreator'), 'seomatic/creator/(?P[-\w\.*]+)' => array('action' => 'seomatic/editCreator'), 'seomatic/meta/new' => array('action' => 'seomatic/editMeta'), 'seomatic/meta/new/(?P[-\w\.*]+)' => array('action' => 'seomatic/editMeta'), 'seomatic/meta/(?P\d+)' => array('action' => 'seomatic/editMeta'), 'seomatic/meta/(?P\d+)/(?P[-\w\.*]+)' => array('action' => 'seomatic/editMeta'), 'seomatic/settings' => array('action' => 'seomatic/editSettings'), ); } /** * @return array */ protected function defineSettings() { return array( 'pluginNameOverride' => AttributeType::String ); } public function onAfterInstall() { /* -- Show our "Welcome to SEOmatic" message */ if (!craft()->isConsole()) craft()->request->redirect(UrlHelper::getCpUrl('seomatic/welcome')); } } /* -- class SeomaticPlugin */ ================================================ FILE: composer.json ================================================ { "name": "nystudio107/seomatic", "minimum-stability": "dev", "description": "A turnkey SEO implementation for Craft CMS that is comprehensive, powerful, and flexible", "type": "craft-plugin", "require": { "crodas/text-rank" : "dev-master", "davechild/textstatistics": "1.0.1", "sunra/php-simple-html-dom-parser": "1.5.1", "composer/installers": "~1.0" } } ================================================ FILE: config.php ================================================ 70, /** * Controls whether SEOmatic will truncate the text in tags maxTitleLength characters. * It is HIGHLY recommended that you leave this on, as search engines do not want * <title> tags to be long, and long titles won't display well on mobile either. */ "truncateTitleTags" => true, /** * The maximum number of characters allow for the seoDescription. It's HIGHLY recommend that * you keep this set to 160 characters. */ "maxDescriptionLength" => 160, /** * Controls whether SEOmatic will truncate the descrption tags maxDescriptionLength characters. * It is HIGHLY recommended that you leave this on, as search engines do not want * description tags to be long. */ "truncateDescriptionTags" => true, /** * The maximum number of characters allow for the seoKeywords. It's HIGHLY recommend that * you keep this set to 200 characters. */ "maxKeywordsLength" => 200, /** * Controls whether SEOmatic will truncate the keywords tags maxKeywordsLength characters. * It is HIGHLY recommended that you leave this on, as search engines do not want * keywords tags to be long. */ "truncateKeywordsTags" => true, /** * SEOmatic will render the Google Analytics <script> tag and code for you, if you * enter a Google Analytics UID tracking code in the Site Identity settings. It * does not render the <script> tag if devMode is on or during Live Preview, but * here is an additional override for controlling it. */ "renderGoogleAnalyticsScript" => true, /** * SEOmatic will render the Google Tag Manager <script> tag and code for you, if you * enter a Google Tag Manager ID tracking code in the Site Identity settings. It * does not render the <script> tag during Live Preview, but here is an additional * override for controlling it. It does render the script tag if devMode is on, * to allow for debugging GTM. */ "renderGoogleTagManagerScript" => true, /** * This controls the name of the Javascript variable that SEOmatic outputs for the * dataLayer variable. Note that the Twig variable always will be named: * `dataLayer` regardless of this setting. */ "gtmDataLayerVariableName" => "dataLayer", /** * SEOmatic will render Product JSON-LD microdata for you automatically, if an SEOmatic Meta * FieldType is attached to a Craft Commerce Product. Set this to false to override * this behavior, and not render the Product JSON-LD microdata. */ "renderCommerceProductJSONLD" => true, /** * SEOmatic uses the `siteUrl` to generate the external URLs. If you are using it in * a non-standard environment, such as a headless ElementAPI server, you can override * what it uses for the `siteUrl` below. */ "siteUrlOverride" => '', /** * Controls whether SEOmatic will display the SEOmetrics information during Live Preview. */ "displaySeoMetrics" => true, /** * Determines the name used for the "Home" default breadcrumb. */ "breadcrumbsHomeName" => 'Home', /** * Determines the string prepended to the <title> tag when devMode is on. */ "siteDevModeTitle" => '[devMode]', /** * This allows you to globally override the meta settings on your website. WARNING: * anything you set here will REPLACE the meta settings globally. You might wish to * use this, for instance, to set 'robots' to be 'none' on development/staging to * prevent crawlers from indexing it. Since this config file is multi-environment aware, * like any Craft config file, this allows you to do just that. * Leave any value in the array blank to cause it to not override. */ "globalMetaOverride" => array( 'locale' => '', 'seoMainEntityCategory' => '', 'seoMainEntityOfPage' => '', 'seoTitle' => '', 'seoDescription' => '', 'seoKeywords' => '', 'seoImageTransform' => '', 'seoFacebookImageTransform' => '', 'seoTwitterImageTransform' => '', 'twitterCardType' => '', 'openGraphType' => '', 'robots' => '', 'seoImageId' => '', ), /** * This allows you to exclude locales from SEOmatic's automatic handling of * hreflang. Useful for some multi-site situations */ "excludeLocales" => array( ), ); ================================================ FILE: controllers/SeomaticController.php ================================================ <?php namespace Craft; use \DaveChild\TextStatistics as TS; use \Sunra\PhpSimple\HtmlDomParser; class SeomaticController extends BaseController { protected $allowAnonymous = array('actionRenderHumans', 'actionRenderRobots', 'actionRenderMetrics'); protected $parsingDom = false; /** */ public function actionEditSettings() { $seomaticPlugin = craft()->plugins->getPlugin('seomatic'); $settings = $seomaticPlugin->getSettings(); $this->renderTemplate('seomatic/settings', array( 'settings' => $settings )); } /* -- actionEditSettings */ /* -------------------------------------------------------------------------------- Render the SEO Metrics -------------------------------------------------------------------------------- */ public function actionRenderMetrics() { if (!$this->parsingDom) { $this->parsingDom = true; $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the SEOmatic display preview template */ $url = urldecode(craft()->request->getParam('url')); if (UrlHelper::isAbsoluteUrl($url)) { $urlParts = parse_url($url); if (isset($urlParts['scheme'])) $rootUrl = $urlParts['scheme'] . "://" . $urlParts['host']; else $rootUrl = "http" . "://" . $urlParts['host']; if (isset($urlParts['port'])) $rootUrl .= $urlParts['port'] . "/"; else $rootUrl .= "/"; $keywordsParam = urldecode(craft()->request->getParam('keywords')); $keywordsKeys = explode(",", $keywordsParam); $keywords = array(); /* -- Silly work-around for what appears to be a file_get_contents bug with https -> http://stackoverflow.com/questions/10524748/why-im-getting-500-error-when-using-file-get-contents-but-works-in-a-browser */ $opts = array( 'ssl'=>array( 'verify_peer'=>false, 'verify_peer_name'=>false, ), 'http'=>array( 'ignore_errors' => true, 'header' => "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13\r\n" ) ); $context = stream_context_create($opts); $dom = HtmlDomParser::file_get_html($url, false, $context); if ($dom) { $textStatistics = new TS\TextStatistics; /* -- See if robots.txt exists */ $hasRobotsTxt = false; $hasSitemap = false; $sitemapUrl = rtrim($rootUrl, '/') . "/sitemap.xml"; $foundSitemapUrl = ""; $robotsUrl = rtrim($rootUrl, '/') . "/robots.txt"; $robots = @file_get_contents($robotsUrl, false, $context); if ($robots !== false) { $hasRobotsTxt = true; $lines = explode("\n", $robots); foreach ($lines as $line) { $line = ltrim($line); $searchStr = 'Sitemap'; $pos = strpos($line, $searchStr); if ($pos !== false) { $pos += strlen($searchStr); $foundSitemapUrl = substr($line, $pos); $foundSitemapUrl = trim($sitemapUrl, ':'); $foundSitemapUrl = trim($sitemapUrl); } } } /* -- Check to see if a sitemap exists */ if ($foundSitemapUrl) { $siteMapContents = ""; $siteMapContents = @file_get_contents($sitemapUrl, false, $context, 0, 1); if ($siteMapContents !== false) $hasSitemap = true; } $siteMapContents = ""; $siteMapContents = @file_get_contents($sitemapUrl, false, $context, 0, 1); if ($siteMapContents !== false) $hasSitemap = true; /* -- See if the site is https */ $sslReturnCode = 0; $sslUrl = "https" . "://" . $urlParts['host']; if (isset($urlParts['port'])) $sslUrl .= $sslUrl['port'] . '/'; else $sslUrl .= '/'; $ch = curl_init($sslUrl); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $open_basedir = ini_get('open_basedir'); if (empty($open_basedir)) curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); curl_exec($ch); $sslReturnCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); /* -- Check to see if the page is valid */ $validatorUrl = "https://validator.w3.org/check?uri=" . urlencode($url) . "&output=json"; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, $validatorUrl); $validatorResult = curl_exec($ch); curl_close($ch); $validatorStatus = $validatorErrors = $validatorWarnings = ""; if ($validatorResult) { $searchStr = "X-W3C-Validator-Status: "; $pos = strpos($validatorResult, $searchStr); if ($pos !== false) { $pos += strlen($searchStr); $validatorStatus = substr($validatorResult, $pos, ( strpos($validatorResult, PHP_EOL, $pos) ) - $pos); } $searchStr = "X-W3C-Validator-Errors: "; $pos = strpos($validatorResult, $searchStr); if ($pos !== false) { $pos += strlen($searchStr); $validatorErrors = substr($validatorResult, $pos, ( strpos($validatorResult, PHP_EOL, $pos) ) - $pos); } $searchStr = "X-W3C-Validator-Warnings: "; $pos = strpos($validatorResult, $searchStr); if ($pos !== false) { $pos += strlen($searchStr); $validatorWarnings = substr($validatorResult, $pos, ( strpos($validatorResult, PHP_EOL, $pos) ) - $pos); } } $validatorUrl = "https://validator.w3.org/check?uri=" . urlencode($url); /* -- Check Google Pagespeed insights for desktop */ $pagespeedDesktopScore = ""; $pagespeedDesktopUrl = "https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url=" . urlencode($url) . "&strategy=desktop"; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, $pagespeedDesktopUrl); $pagespeedDesktopResult = curl_exec($ch); curl_close($ch); $pageSpeedPageStats = array(); if ($pagespeedDesktopResult) { $pagespeedJson = json_decode($pagespeedDesktopResult, true); if ($pagespeedJson) { if (!empty($pagespeedJson['pageStats'])) { $pageSpeedPageStats = $pagespeedJson['pageStats']; if (empty($pageSpeedPageStats['htmlResponseBytes'])) $pageSpeedPageStats['htmlResponseBytes'] = 0; if (empty($pageSpeedPageStats['cssResponseBytes'])) $pageSpeedPageStats['cssResponseBytes'] = 0; if (empty($pageSpeedPageStats['imageResponseBytes'])) $pageSpeedPageStats['imageResponseBytes'] = 0; if (empty($pageSpeedPageStats['javascriptResponseBytes'])) $pageSpeedPageStats['javascriptResponseBytes'] = 0; if (empty($pageSpeedPageStats['otherResponseBytes'])) $pageSpeedPageStats['otherResponseBytes'] = 0; $pageSpeedPageStats['totalResponseBytes'] = $pageSpeedPageStats['htmlResponseBytes'] + $pageSpeedPageStats['cssResponseBytes'] + $pageSpeedPageStats['imageResponseBytes'] + $pageSpeedPageStats['javascriptResponseBytes'] + $pageSpeedPageStats['otherResponseBytes']; } if (isset($pagespeedJson['responseCode']) && ($pagespeedJson['responseCode'] == "200" || $pagespeedJson['responseCode'] == "301" || $pagespeedJson['responseCode'] == "302")) { if (isset($pagespeedJson['ruleGroups']['SPEED']['score'])) $pagespeedDesktopScore = intval($pagespeedJson['ruleGroups']['SPEED']['score']); } } } $pagespeedDesktopUrl = "https://developers.google.com/speed/pagespeed/insights/?url=" . urlencode($url) . "&tab=desktop"; /* -- Check Google Pagespeed insights for desktop */ $pagespeedMobileScore = ""; $pagespeedMobileUsability = ""; $pagespeedMobileUrl = "https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url=" . urlencode($url) . "&strategy=mobile"; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); curl_setopt($ch, CURLOPT_URL, $pagespeedMobileUrl); $pagespeedMobileResult = curl_exec($ch); curl_close($ch); if ($pagespeedMobileResult) { $pagespeedJson = json_decode($pagespeedMobileResult, true); if ($pagespeedJson) { if (isset($pagespeedJson['responseCode']) && ($pagespeedJson['responseCode'] == "200" || $pagespeedJson['responseCode'] == "301" || $pagespeedJson['responseCode'] == "302")) { if (isset($pagespeedJson['ruleGroups']['SPEED']['score'])) $pagespeedMobileScore = intval($pagespeedJson['ruleGroups']['SPEED']['score']); if (isset($pagespeedJson['ruleGroups']['USABILITY']['score'])) $pagespeedMobileUsability = intval($pagespeedJson['ruleGroups']['USABILITY']['score']); } } } $pagespeedMobileUrl = "https://developers.google.com/speed/pagespeed/insights/?url=" . urlencode($url) . "&tab=mobile"; /* -- Scrape for JSON-LD before we remove the <script> tags */ $jsonLdTypes = array(); foreach($dom->find('script[type=application/ld+json]') as $elem) { $jsonArray = json_decode($elem->innertext, true); if (isset($jsonArray['@type'])) array_push($jsonLdTypes, $jsonArray['@type']); } $jsonLdTypes = array_unique($jsonLdTypes); /* -- Remove inline <script> and <style> tags, and then strip the DOM down */ foreach($dom->find('style') as $element) $element->outertext = ''; foreach($dom->find('script') as $element) $element->outertext = ''; $strippedDom = html_entity_decode($dom->plaintext); // $strippedDom = preg_replace('@[^0-9a-z\.\!]+@i', ', ', $strippedDom); $strippedDom = stripslashes($strippedDom); $htmlDom = html_entity_decode($dom->outertext); // $htmlDom = preg_replace('@[^0-9a-z\.\!]+@i', '', $htmlDom); /* -- SEO statistics */ $titleTag = html_entity_decode($dom->find('title', 0)->plaintext); $titleLength = strlen($titleTag); $metaDescriptionTag = ""; $metaDescriptionLength = 0; $elem = $dom->find('meta[name=description]', 0); if ($elem) { $metaDescriptionTag = html_entity_decode($elem->content); $metaDescriptionLength = strlen($metaDescriptionTag); } $metaTwitterTag = ""; $elem = $dom->find('meta[name=twitter:card],meta[property=twitter:card]', 0); if ($elem) $metaTwitterTag = html_entity_decode($elem->content); $metaOpenGraphTag = ""; $elem = $dom->find('meta[property=og:type],meta[property=og:url],meta[property=og:title]', 0); if ($elem) $metaOpenGraphTag = html_entity_decode($elem->content); $hasRelPublisherTag = false; $elem = $dom->find('link[rel=publisher]', 0); if ($elem) $hasRelPublisherTag = true; $emptyImageAlts = count($dom->find('img[!alt]')); $h1Tags = count($dom->find('h1')); $h2Tags = count($dom->find('h2')); $h3Tags = count($dom->find('h3')); $h4Tags = count($dom->find('h4')); $h5Tags = count($dom->find('h5')); $totalHTags = $h1Tags + $h2Tags + $h3Tags + $h4Tags + $h5Tags; $effectiveHTags = true; if ($h1Tags != 1) $effectiveHTags = false; if ($totalHTags < 3) $effectiveHTags = false; if ($h2Tags == 0 && ($h3Tags || $h4Tags || $h5Tags)) $effectiveHTags = false; if ($h3Tags == 0 && ($h4Tags || $h5Tags)) $effectiveHTags = false; if ($h4Tags == 0 && ($h5Tags)) $effectiveHTags = false; $textToHtmlRatio = (strlen($strippedDom) / (strlen($htmlDom) - strlen($strippedDom))) * 100; $strippedDom = preg_replace('/\s+/', ' ', $strippedDom); /* -- Extract the page keywords, and clean them up a bit */ $pageKeywords = craft()->seomatic->extractKeywords($strippedDom); $pageKeywords = str_replace(",,",",", $pageKeywords); $pageKeywords = str_replace(" ,",",", $pageKeywords); $pageKeywords = str_replace(" .",".", $pageKeywords); $pageKeywords = preg_replace('/\.+/', '.', $pageKeywords); $pageKeywords = preg_replace('/,+/', ',', $pageKeywords); $pageKeywords = str_replace(",.,",",", $pageKeywords); $pageKeywords = html_entity_decode($pageKeywords, ENT_COMPAT, 'UTF-8'); /* -- Focus keywords */ foreach ($keywordsKeys as $keywordsKey) { $keywordsKey = trim($keywordsKey); if (strlen($keywordsKey)) { $appearsInH1Tag = 0; foreach($dom->find('h1') as $element) $appearsInH1Tag += substr_count(strtolower($element->plaintext), strtolower($keywordsKey)); foreach($dom->find('h2') as $element) $appearsInH1Tag += substr_count(strtolower($element->plaintext), strtolower($keywordsKey)); $appearsInImgTag = 0; foreach($dom->find('img') as $element) $appearsInImgTag += substr_count(strtolower($element->alt), strtolower($keywordsKey)); $appearsInAhrefTag = 0; foreach($dom->find('a') as $element) $appearsInAhrefTag += substr_count(strtolower($element->plaintext), strtolower($keywordsKey)); $keywords[$keywordsKey] = array( 'appearsInTitleTag' => substr_count(strtolower($titleTag), strtolower($keywordsKey)), 'appearsInUrl' => substr_count(strtolower($url), strtolower($keywordsKey)), 'appearsInMetaDescriptionTag' => substr_count(strtolower($metaDescriptionTag), strtolower($keywordsKey)), 'appearsInH1Tag' => $appearsInH1Tag, 'appearsInAhrefTag' => $appearsInAhrefTag, 'appearsInImgTag' => $appearsInImgTag, 'appearsInPageKeywords' => substr_count(strtolower($pageKeywords), strtolower($keywordsKey)), 'appearsOnWebPage' => substr_count(strtolower($strippedDom), strtolower($keywordsKey)), ); } } /* -- Text statistics */ $wordCount = $textStatistics->wordCount($strippedDom); $readingTime = floor($wordCount / 200); if ($readingTime === 0) $readingTime = 1; $fleschKincaidReadingEase = $textStatistics->fleschKincaidReadingEase($strippedDom); $fleschKincaidGradeLevel = $textStatistics->fleschKincaidGradeLevel($strippedDom); $gunningFogScore = $textStatistics->gunningFogScore($strippedDom); $colemanLiauIndex = $textStatistics->colemanLiauIndex($strippedDom); $smogIndex = $textStatistics->smogIndex($strippedDom); $automatedReadabilityIndex = $textStatistics->automatedReadabilityIndex($strippedDom); $vars = array( 'titleTag' => $titleTag, 'titleLength' => $titleLength, 'metaDescriptionTag' => $metaDescriptionTag, 'metaDescriptionLength' => $metaDescriptionLength, 'metaTwitterTag' => $metaTwitterTag, 'metaOpenGraphTag' => $metaOpenGraphTag, 'hasRelPublisherTag' => $hasRelPublisherTag, 'jsonLdTypes' => $jsonLdTypes, 'hasRobotsTxt' => $hasRobotsTxt, 'hasSitemap' => $hasSitemap, 'emptyImageAlts' => $emptyImageAlts, 'validatorUrl' => $validatorUrl, 'validatorStatus' => $validatorStatus, 'validatorErrors' => $validatorErrors, 'validatorWarnings' => $validatorWarnings, 'pageSpeedPageStats' => $pageSpeedPageStats, 'pagespeedDesktopScore' => $pagespeedDesktopScore, 'pagespeedDesktopUrl' => $pagespeedDesktopUrl, 'pagespeedMobileScore' => $pagespeedMobileScore, 'pagespeedMobileUsability' => $pagespeedMobileUsability, 'pagespeedMobileUrl' => $pagespeedMobileUrl, 'sslReturnCode' => $sslReturnCode, 'h1Tags' => $h1Tags, 'h2Tags' => $h2Tags, 'h3Tags' => $h3Tags, 'h4Tags' => $h4Tags, 'h5Tags' => $h5Tags, 'effectiveHTags' => $effectiveHTags, 'textToHtmlRatio' => $textToHtmlRatio, 'wordCount' => $wordCount, 'readingTime' => $readingTime, 'pageKeywords' => $pageKeywords, 'keywords' => $keywords, 'fleschKincaidReadingEase' => $fleschKincaidReadingEase, 'fleschKincaidGradeLevel' => $fleschKincaidGradeLevel, 'gunningFogScore' => $gunningFogScore, 'colemanLiauIndex' => $colemanLiauIndex, 'smogIndex' => $smogIndex, 'automatedReadabilityIndex' => $automatedReadabilityIndex, ); //$htmlText = craft()->templates->render('_seo_metrics.twig', $vars); $this->renderTemplate('_seo_metrics.twig', $vars); } else $this->renderTemplate('_error', array('errorMessage' => "Error parsing the DOM. Is this a valid, publicly accessible URL?")); } else $this->renderTemplate('_error', array('errorMessage' => "Error loading the webpage. Is this a valid, publicly accessible URL?")); method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); } $this->parsingDom = false; } /* -- actionRenderMetrics */ /* -------------------------------------------------------------------------------- Render the humans.txt template -------------------------------------------------------------------------------- */ public function actionRenderHumans(array $variables = array()) { $templatePath = ''; $locale = ''; if (!$locale) $locale = craft()->language; $metaVars = craft()->seomatic->getGlobals('', $locale); /* -- Tell Twig not to escape at all for this text template */ $twig = craft()->templates->getTwig(); $escaper = $twig->getExtension('escaper'); $escaper->setDefaultStrategy(false); if ($templatePath) { $htmlText = craft()->templates->render($templatePath); } else { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the core template */ $templateName = '_humans'; $this->renderTemplate($templateName, $metaVars); method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); } } /* -- actionRenderHumans */ /* -------------------------------------------------------------------------------- Render the robots.txt template -------------------------------------------------------------------------------- */ public function actionRenderRobots(array $variables = array()) { $templatePath = ''; $locale = ''; if (!$locale) $locale = craft()->language; $metaVars = craft()->seomatic->getGlobals('', $locale); /* -- Tell Twig not to escape at all for this text template */ $twig = craft()->templates->getTwig(); $escaper = $twig->getExtension('escaper'); $escaper->setDefaultStrategy(false); if ($templatePath) { $htmlText = craft()->templates->render($templatePath); } else { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the core template */ $templateName = '_robots'; $this->renderTemplate($templateName, $metaVars); craft()->path->setTemplatesPath($oldPath); method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); } } /* -- actionRenderRobots */ /* -------------------------------------------------------------------------------- Edit the SiteMeta record -------------------------------------------------------------------------------- */ public function actionEditSiteMeta(array $variables = array()) { if (isset($variables['locale'])) $locale = $variables['locale']; else $locale = craft()->language; $siteMeta = craft()->seomatic->getSiteMeta($locale); $titleLength = craft()->config->get("maxTitleLength", "seomatic"); if ($siteMeta['siteSeoTitlePlacement'] == "none") $variables['titleLength'] = $titleLength; else $variables['titleLength'] = ($titleLength - strlen(" | ") - strlen($siteMeta['siteSeoName'])); $variables['siteMeta'] = $siteMeta; // Whether any assets sources exist $sources = craft()->assets->findFolders(); $variables['assetsSourceExists'] = count($sources); // URL to create a new assets source $variables['newAssetsSourceUrl'] = UrlHelper::getUrl('settings/assets/sources/new'); // Set asset ID $variables['siteSeoImageId'] = $variables['siteMeta']['siteSeoImageId']; // Set asset elements if ($variables['siteSeoImageId']) { if (is_array($variables['siteSeoImageId'])) { $variables['siteSeoImageId'] = $variables['siteSeoImageId'][0]; } $asset = craft()->elements->getElementById($variables['siteSeoImageId']); $variables['elements'] = array($asset); } else { $variables['elements'] = array(); } // Set asset ID $variables['siteSeoTwitterImageId'] = $variables['siteMeta']['siteSeoTwitterImageId']; // Set asset elements if ($variables['siteSeoTwitterImageId']) { if (is_array($variables['siteSeoTwitterImageId'])) { $variables['siteSeoTwitterImageId'] = $variables['siteSeoTwitterImageId'][0]; } $asset = craft()->elements->getElementById($variables['siteSeoTwitterImageId']); $variables['elementsTwitter'] = array($asset); } else { $variables['elementsTwitter'] = array(); } // Set asset ID $variables['siteSeoFacebookImageId'] = $variables['siteMeta']['siteSeoFacebookImageId']; // Set asset elements if ($variables['siteSeoFacebookImageId']) { if (is_array($variables['siteSeoFacebookImageId'])) { $variables['siteSeoFacebookImageId'] = $variables['siteSeoFacebookImageId'][0]; } $asset = craft()->elements->getElementById($variables['siteSeoFacebookImageId']); $variables['elementsFacebook'] = array($asset); } else { $variables['elementsFacebook'] = array(); } // Set element type $variables['elementType'] = craft()->elements->getElementType(ElementType::Asset); // Set the "Continue Editing" URL $variables['continueEditingUrl'] = 'seomatic/site'; $variables['transformsList'] = craft()->seomatic->getTransformsList(); // Render the template! $this->renderTemplate('seomatic/site/_edit', $variables); } /* -- actionEditSiteMeta */ /* -------------------------------------------------------------------------------- Edit the Identity record -------------------------------------------------------------------------------- */ public function actionEditIdentity(array $variables = array()) { if (isset($variables['locale'])) $locale = $variables['locale']; else $locale = craft()->language; $variables['identity'] = craft()->seomatic->getIdentity($locale); /* -- LocalBusiness owner fields https://schema.org/LocalBusiness */ // Whether any assets sources exist $sources = craft()->assets->findFolders(); $variables['assetsSourceExists'] = count($sources); // URL to create a new assets source $variables['newAssetsSourceUrl'] = UrlHelper::getUrl('settings/assets/sources/new'); // Set asset ID $variables['genericOwnerImageId'] = $variables['identity']['genericOwnerImageId']; // Set asset elements if ($variables['genericOwnerImageId']) { if (is_array($variables['genericOwnerImageId'])) { $variables['genericOwnerImageId'] = $variables['genericOwnerImageId'][0]; } $asset = craft()->elements->getElementById($variables['genericOwnerImageId']); $variables['elementsOwnerImage'] = array($asset); } else { $variables['elementsOwnerImage'] = array(); } // Set element type $variables['elementType'] = craft()->elements->getElementType(ElementType::Asset); // Set the "Continue Editing" URL $variables['continueEditingUrl'] = 'seomatic/identity'; // Render the template! $this->renderTemplate('seomatic/identity/_edit', $variables); } /* -- actionEditIdentity */ /* -------------------------------------------------------------------------------- Edit the Social record -------------------------------------------------------------------------------- */ public function actionEditSocial(array $variables = array()) { if (isset($variables['locale'])) $locale = $variables['locale']; else $locale = craft()->language; $variables['social'] = craft()->seomatic->getSocial($locale); // Set the "Continue Editing" URL $variables['continueEditingUrl'] = 'seomatic/social'; // Render the template! $this->renderTemplate('seomatic/social/_edit', $variables); } /* -- actionEditSocial */ /* -------------------------------------------------------------------------------- Edit the Creator record -------------------------------------------------------------------------------- */ public function actionEditCreator(array $variables = array()) { if (isset($variables['locale'])) $locale = $variables['locale']; else $locale = craft()->language; $variables['creator'] = craft()->seomatic->getCreator($locale); // Whether any assets sources exist $sources = craft()->assets->findFolders(); $variables['assetsSourceExists'] = count($sources); // URL to create a new assets source $variables['newAssetsSourceUrl'] = UrlHelper::getUrl('settings/assets/sources/new'); // Set asset ID $variables['genericCreatorImageId'] = $variables['creator']['genericCreatorImageId']; // Set asset elements if ($variables['genericCreatorImageId']) { if (is_array($variables['genericCreatorImageId'])) { $variables['genericCreatorImageId'] = $variables['genericCreatorImageId'][0]; } $asset = craft()->elements->getElementById($variables['genericCreatorImageId']); $variables['elementsCreatorImage'] = array($asset); } else { $variables['elementsCreatorImage'] = array(); } // Set element type $variables['elementType'] = craft()->elements->getElementType(ElementType::Asset); // Set the "Continue Editing" URL $variables['continueEditingUrl'] = 'seomatic/creator'; // Render the template! $this->renderTemplate('seomatic/creator/_edit', $variables); } /* -- actionEditCreator */ /* ================================================================================ META ElementTypes ================================================================================ */ /* -------------------------------------------------------------------------------- Edit a template Meta -------------------------------------------------------------------------------- */ public function actionEditMeta(array $variables = array()) { if (isset($variables['locale'])) $locale = $variables['locale']; else $locale = craft()->language; $siteMeta = craft()->seomatic->getSiteMeta($locale); $titleLength = craft()->config->get("maxTitleLength", "seomatic"); if ($siteMeta['siteSeoTitlePlacement'] == "none") $variables['titleLength'] = $titleLength; else $variables['titleLength'] = ($titleLength - strlen(" | ") - strlen($siteMeta['siteSeoName'])); if (empty($variables['meta'])) { if (!empty($variables['metaId'])) { $variables['meta'] = craft()->seomatic->getMetaById($variables['metaId'], $locale); /* -- If we have a metaId but nothing is returned for that locale, make a new element/record using that elementId */ if (!$variables['meta']) { /* $variables['meta'] = new Seomatic_MetaModel(); $variables['meta']['locale'] = $locale; $variables['meta']['elementId'] = $variables['metaId']; */ throw new HttpException(404); } } else { $variables['meta'] = new Seomatic_MetaModel(); $variables['meta']['locale'] = $locale; } } // Whether any assets sources exist $sources = craft()->assets->findFolders(); $variables['assetsSourceExists'] = count($sources); $variables['transformsList'] = craft()->seomatic->getTransformsList(); // URL to create a new assets source $variables['newAssetsSourceUrl'] = UrlHelper::getUrl('settings/assets/sources/new'); // Set asset ID $variables['seoImageId'] = $variables['meta']->seoImageId; // Set asset elements if ($variables['seoImageId']) { if (is_array($variables['seoImageId'])) { $variables['seoImageId'] = $variables['seoImageId'][0]; } $asset = craft()->elements->getElementById($variables['seoImageId']); $variables['elements'] = array($asset); } else { $variables['elements'] = array(); } // Set asset ID $variables['seoTwitterImageId'] = $variables['meta']->seoTwitterImageId; // Set asset elements if ($variables['seoTwitterImageId']) { if (is_array($variables['seoTwitterImageId'])) { $variables['seoTwitterImageId'] = $variables['seoTwitterImageId'][0]; } $asset = craft()->elements->getElementById($variables['seoTwitterImageId']); $variables['elementsTwitter'] = array($asset); } else { $variables['elementsTwitter'] = array(); } // Set asset ID $variables['seoFacebookImageId'] = $variables['meta']->seoFacebookImageId; // Set asset elements if ($variables['seoFacebookImageId']) { if (is_array($variables['seoFacebookImageId'])) { $variables['seoFacebookImageId'] = $variables['seoFacebookImageId'][0]; } $asset = craft()->elements->getElementById($variables['seoFacebookImageId']); $variables['elementsFacebook'] = array($asset); } else { $variables['elementsFacebook'] = array(); } // Set element type $variables['elementType'] = craft()->elements->getElementType(ElementType::Asset); // Tabs $variables['tabs'] = array(); if (!$variables['meta']->id) { $variables['title'] = Craft::t('Untitled Meta'); } else { $variables['title'] = $variables['meta']->title; } // Breadcrumbs $variables['crumbs'] = array( array('label' => Craft::t('SEO Template Meta'), 'url' => UrlHelper::getUrl('seomatic/meta')), ); // Set the "Continue Editing" URL $variables['continueEditingUrl'] = 'seomatic/meta/{id}/{locale}'; // Render the template! $this->renderTemplate('seomatic/meta/_edit', $variables); } /* -- actionEditMeta */ /* -------------------------------------------------------------------------------- Save a meta -------------------------------------------------------------------------------- */ public function actionSaveMeta() { $this->requirePostRequest(); $metaId = craft()->request->getPost('metaId'); $locale = craft()->request->getPost('locale'); /* $elementId = craft()->request->getPost('elementId'); */ if ($metaId) { $model = craft()->seomatic->getMetaById($metaId, $locale); if (!$model) { /* $model = new Seomatic_MetaModel(); $elementId = $metaId; */ throw new Exception(Craft::t('No meta exists with the ID “{id}”', array('id' => $metaId))); } } else { $model = new Seomatic_MetaModel(); } /* -- Set the Meta attributes, defaulting to the existing values for whatever is missing from the post data */ $model->locale = craft()->request->getPost('locale', $locale); $model->elementId = $metaId; $model->metaType = craft()->request->getPost('metaType', $model->metaType); $model->metaPath = craft()->request->getPost('metaPath', $model->metaPath); $model->seoMainEntityCategory = craft()->request->getPost('seoMainEntityCategory', $model->seoMainEntityCategory); $model->seoMainEntityOfPage = craft()->request->getPost('seoMainEntityOfPage', $model->seoMainEntityOfPage); $model->seoTitle = craft()->request->getPost('seoTitle', $model->seoTitle); $model->seoDescription = craft()->request->getPost('seoDescription', $model->seoDescription); $model->seoKeywords = craft()->request->getPost('seoKeywords', $model->seoKeywords); $model->seoImageTransform = craft()->request->getPost('seoImageTransform', $model->seoImageTransform); $model->seoFacebookImageTransform = craft()->request->getPost('seoFacebookImageTransform', $model->seoFacebookImageTransform); $model->seoTwitterImageTransform = craft()->request->getPost('seoTwitterImageTransform', $model->seoTwitterImageTransform); $model->twitterCardType = craft()->request->getPost('twitterCardType', $model->twitterCardType); $model->openGraphType = craft()->request->getPost('openGraphType', $model->openGraphType); $model->robots = craft()->request->getPost('robots', $model->robots); $model->seoImageId = craft()->request->getPost('seoImageId', $model->seoImageId); $model->seoTwitterImageId = craft()->request->getPost('seoTwitterImageId', $model->seoTwitterImageId); $model->seoFacebookImageId = craft()->request->getPost('seoFacebookImageId', $model->seoFacebookImageId); $model->enabled = (bool)craft()->request->getPost('enabled', $model->enabled); $model->getContent()->title = craft()->request->getPost('title', $model->title); if (craft()->seomatic->saveMeta($model)) { craft()->userSession->setNotice(Craft::t('SEOmatic Meta saved.')); $this->redirectToPostedUrl($model); } else { craft()->userSession->setError(Craft::t('Couldn’t save SEOmatic Meta.')); /* -- Send the Meta back to the template */ craft()->urlManager->setRouteVariables(array( 'meta' => $model )); } } /* -- actionSaveMeta */ /* -------------------------------------------------------------------------------- Save a meta -------------------------------------------------------------------------------- */ public function actionDeleteMeta() { $this->requirePostRequest(); $metaId = craft()->request->getRequiredPost('metaId'); if (craft()->elements->deleteElementById($metaId)) { craft()->userSession->setNotice(Craft::t('SEOmatic Meta deleted.')); $this->redirectToPostedUrl(); } else { craft()->userSession->setError(Craft::t('Couldn’t delete SEOmatic Meta.')); } } /* -- actionDeleteMeta */ /* ================================================================================ SITEMETA records ================================================================================ */ /* -------------------------------------------------------------------------------- Save the SiteMeta record -------------------------------------------------------------------------------- */ public function actionSaveSiteMeta() { $this->requirePostRequest(); $locale = craft()->request->getPost('locale'); if (!$locale) $locale = craft()->language; $record = Seomatic_SettingsRecord::model()->findByAttributes(array( 'locale' => $locale, )); if (!$record) { throw new Exception(Craft::t('No SEOmatic Site Meta exists')); } /* -- Set the SiteMeta attributes, defaulting to the existing values for whatever is missing from the post data */ $record->siteSeoName = craft()->request->getPost('siteSeoName', $record->siteSeoName); $record->siteSeoTitle = craft()->request->getPost('siteSeoTitle', $record->siteSeoTitle); $record->siteSeoTitleSeparator = craft()->request->getPost('siteSeoTitleSeparator', $record->siteSeoTitleSeparator); $record->siteSeoTitlePlacement = craft()->request->getPost('siteSeoTitlePlacement', $record->siteSeoTitlePlacement); $record->siteSeoDescription = craft()->request->getPost('siteSeoDescription', $record->siteSeoDescription); $record->siteSeoKeywords = craft()->request->getPost('siteSeoKeywords', $record->siteSeoKeywords); $record->siteSeoImageTransform = craft()->request->getPost('siteSeoImageTransform', $record->siteSeoImageTransform); $record->siteSeoFacebookImageTransform = craft()->request->getPost('siteSeoFacebookImageTransform', $record->siteSeoFacebookImageTransform); $record->siteSeoTwitterImageTransform = craft()->request->getPost('siteSeoTwitterImageTransform', $record->siteSeoTwitterImageTransform); $record->siteTwitterCardType = craft()->request->getPost('siteTwitterCardType', $record->siteTwitterCardType); $record->siteOpenGraphType = craft()->request->getPost('siteOpenGraphType', $record->siteOpenGraphType); $record->siteRobots = craft()->request->getPost('siteRobots', $record->siteRobots); $record->siteLinksSearchTargets = craft()->request->getPost('siteLinksSearchTargets', array()); $record->siteLinksQueryInput = craft()->request->getPost('siteLinksQueryInput', $record->siteLinksQueryInput); $record->siteRobotsTxt = craft()->request->getPost('siteRobotsTxt', $record->siteRobotsTxt); $record->siteSeoImageId = craft()->request->getPost('siteSeoImageId', $record->siteSeoImageId); $assetId = (!empty($record->siteSeoImageId) ? $record->siteSeoImageId[0] : null); $record->siteSeoImageId = $assetId; $record->siteSeoTwitterImageId = craft()->request->getPost('siteSeoTwitterImageId', $record->siteSeoTwitterImageId); $assetId = (!empty($record->siteSeoTwitterImageId) ? $record->siteSeoTwitterImageId[0] : null); $record->siteSeoTwitterImageId = $assetId; $record->siteSeoFacebookImageId = craft()->request->getPost('siteSeoFacebookImageId', $record->siteSeoFacebookImageId); $assetId = (!empty($record->siteSeoFacebookImageId) ? $record->siteSeoFacebookImageId[0] : null); $record->siteSeoFacebookImageId = $assetId; if ($record->save()) { craft()->userSession->setNotice(Craft::t('SEOmatic Site Meta saved.')); $this->redirectToPostedUrl($record); } else { craft()->userSession->setError(Craft::t('Couldn’t save SEOmatic Site Meta.')); $this->redirectToPostedUrl($record); } } /* -- actionSaveSiteMeta */ /* ================================================================================ IDENTITY records ================================================================================ */ /* -------------------------------------------------------------------------------- Save the Identity record -------------------------------------------------------------------------------- */ public function actionSaveIdentity() { $this->requirePostRequest(); $locale = craft()->request->getPost('locale'); if (!$locale) $locale = craft()->language; $record = Seomatic_SettingsRecord::model()->findByAttributes(array( 'locale' => $locale, )); if (!$record) { throw new Exception(Craft::t('No SEOmatic Settings record exists')); } /* -- Set the Identity attributes, defaulting to the existing values for whatever is missing from the post data */ $record->googleSiteVerification = craft()->request->getPost('googleSiteVerification', $record->googleSiteVerification); $record->bingSiteVerification = craft()->request->getPost('bingSiteVerification', $record->bingSiteVerification); $record->googleAnalyticsUID = craft()->request->getPost('googleAnalyticsUID', $record->googleAnalyticsUID); $record->googleTagManagerID = craft()->request->getPost('googleTagManagerID', $record->googleTagManagerID); $record->googleAnalyticsSendPageview = craft()->request->getPost('googleAnalyticsSendPageview', $record->googleAnalyticsSendPageview); $record->googleAnalyticsAdvertising = craft()->request->getPost('googleAnalyticsAdvertising', $record->googleAnalyticsAdvertising); $record->googleAnalyticsEcommerce = craft()->request->getPost('googleAnalyticsEcommerce', $record->googleAnalyticsEcommerce); $record->googleAnalyticsEEcommerce = craft()->request->getPost('googleAnalyticsEEcommerce', $record->googleAnalyticsEEcommerce); $record->googleAnalyticsLinkAttribution = craft()->request->getPost('googleAnalyticsLinkAttribution', $record->googleAnalyticsLinkAttribution); $record->googleAnalyticsLinker = craft()->request->getPost('googleAnalyticsLinker', $record->googleAnalyticsLinker); $record->googleAnalyticsAnonymizeIp = craft()->request->getPost('googleAnalyticsAnonymizeIp', $record->googleAnalyticsAnonymizeIp); $record->siteOwnerType = craft()->request->getPost('siteOwnerType', $record->siteOwnerType); $record->siteOwnerSubType = craft()->request->getPost('siteOwnerSubType', $record->siteOwnerSubType); $record->siteOwnerSpecificType = craft()->request->getPost('siteOwnerSpecificType', $record->siteOwnerSpecificType); /* -- Generic owner fields */ $record->genericOwnerName = craft()->request->getPost('genericOwnerName', $record->genericOwnerName); $record->genericOwnerAlternateName = craft()->request->getPost('genericOwnerAlternateName', $record->genericOwnerAlternateName); $record->genericOwnerDescription = craft()->seomatic->truncateStringOnWord(craft()->request->getPost('genericOwnerDescription', $record->genericOwnerDescription), 1024); $record->genericOwnerUrl = craft()->request->getPost('genericOwnerUrl', $record->genericOwnerUrl); $record->genericOwnerTelephone = craft()->request->getPost('genericOwnerTelephone', $record->genericOwnerTelephone); $record->genericOwnerEmail = craft()->request->getPost('genericOwnerEmail', $record->genericOwnerEmail); $record->genericOwnerStreetAddress = craft()->request->getPost('genericOwnerStreetAddress', $record->genericOwnerStreetAddress); $record->genericOwnerAddressLocality = craft()->request->getPost('genericOwnerAddressLocality', $record->genericOwnerAddressLocality); $record->genericOwnerAddressRegion = craft()->request->getPost('genericOwnerAddressRegion', $record->genericOwnerAddressRegion); $record->genericOwnerPostalCode = craft()->request->getPost('genericOwnerPostalCode', $record->genericOwnerPostalCode); $record->genericOwnerAddressCountry = craft()->request->getPost('genericOwnerAddressCountry', $record->genericOwnerAddressCountry); $record->genericOwnerGeoLatitude = craft()->request->getPost('genericOwnerGeoLatitude', $record->genericOwnerGeoLatitude); $record->genericOwnerGeoLongitude = craft()->request->getPost('genericOwnerGeoLongitude', $record->genericOwnerGeoLongitude); /* -- Corporation owner fields http://schema.org/Organization */ $record->organizationOwnerDuns = craft()->request->getPost('organizationOwnerDuns', $record->organizationOwnerDuns); $record->organizationOwnerFounder = craft()->request->getPost('organizationOwnerFounder', $record->organizationOwnerFounder); $record->organizationOwnerFoundingDate = craft()->request->getPost('organizationOwnerFoundingDate', $record->organizationOwnerFoundingDate); $record->organizationOwnerFoundingLocation = craft()->request->getPost('organizationOwnerFoundingLocation', $record->organizationOwnerFoundingLocation); $record->organizationOwnerContactPoints = craft()->request->getPost('organizationOwnerContactPoints', array()); /* -- Person owner fields https://schema.org/Person */ $record->personOwnerGender = craft()->request->getPost('personOwnerGender', $record->personOwnerGender); $record->personOwnerBirthPlace = craft()->request->getPost('personOwnerBirthPlace', $record->personOwnerBirthPlace); /* -- LocalBusiness owner fields https://schema.org/LocalBusiness */ $record->localBusinessPriceRange = craft()->request->getPost('localBusinessPriceRange', $record->localBusinessPriceRange); $hours = craft()->request->getPost('localBusinessOwnerOpeningHours', array()); craft()->seomatic->convertTimes($hours, craft()->getTimeZone()); $record->localBusinessOwnerOpeningHours = $hours; /* -- Corporation owner fields http://schema.org/Corporation */ $record->corporationOwnerTickerSymbol = craft()->request->getPost('corporationOwnerTickerSymbol', $record->corporationOwnerTickerSymbol); /* -- Restaurant owner fields https://schema.org/Restaurant */ $record->restaurantOwnerServesCuisine = craft()->request->getPost('restaurantOwnerServesCuisine', $record->restaurantOwnerServesCuisine); $record->restaurantOwnerMenuUrl = craft()->request->getPost('restaurantOwnerMenuUrl', $record->restaurantOwnerMenuUrl); $record->restaurantOwnerReservationsUrl = craft()->request->getPost('restaurantOwnerReservationsUrl', $record->restaurantOwnerReservationsUrl); $record->genericOwnerImageId = craft()->request->getPost('genericOwnerImageId', $record->genericOwnerImageId); $assetId = (!empty($record->genericOwnerImageId) ? $record->genericOwnerImageId[0] : null); $record->genericOwnerImageId = $assetId; if ($record->save()) { craft()->userSession->setNotice(Craft::t('SEOmatic Site Identity saved.')); $this->redirectToPostedUrl($record); } else { craft()->userSession->setError(Craft::t('Couldn’t save SEOmatic Site Identity.')); $this->redirectToPostedUrl($record); } } /* -- actionSaveIdentity */ /* ================================================================================ SOCIAL records ================================================================================ */ /* -------------------------------------------------------------------------------- Save the Social record -------------------------------------------------------------------------------- */ public function actionSaveSocial() { $this->requirePostRequest(); $locale = craft()->request->getPost('locale'); if (!$locale) $locale = craft()->language; $record = Seomatic_SettingsRecord::model()->findByAttributes(array( 'locale' => $locale, )); if (!$record) { throw new Exception(Craft::t('No SEOmatic Settings Record exists')); } /* -- Set the Social attributes, defaulting to the existing values for whatever is missing from the post data */ $record->twitterHandle = craft()->request->getPost('twitterHandle', $record->twitterHandle); $record->facebookHandle = craft()->request->getPost('facebookHandle', $record->facebookHandle); $record->facebookProfileId = craft()->request->getPost('facebookProfileId', $record->facebookProfileId); $record->facebookAppId = craft()->request->getPost('facebookAppId', $record->facebookAppId); $record->linkedInHandle = craft()->request->getPost('linkedInHandle', $record->linkedInHandle); $record->googlePlusHandle = craft()->request->getPost('googlePlusHandle', $record->googlePlusHandle); $record->youtubeHandle = craft()->request->getPost('youtubeHandle', $record->youtubeHandle); $record->youtubeChannelHandle = craft()->request->getPost('youtubeChannelHandle', $record->youtubeChannelHandle); $record->instagramHandle = craft()->request->getPost('instagramHandle', $record->instagramHandle); $record->pinterestHandle = craft()->request->getPost('pinterestHandle', $record->pinterestHandle); $record->githubHandle = craft()->request->getPost('githubHandle', $record->githubHandle); $record->vimeoHandle = craft()->request->getPost('vimeoHandle', $record->vimeoHandle); $record->wikipediaUrl = craft()->request->getPost('wikipediaUrl', $record->wikipediaUrl); if ($record->save()) { craft()->userSession->setNotice(Craft::t('SEOmatic Social Media saved.')); $this->redirectToPostedUrl($record); } else { craft()->userSession->setError(Craft::t('Couldn’t save SEOmatic Social Media.')); $this->redirectToPostedUrl($record); } } /* -- actionSaveSocial */ /* ================================================================================ CREATOR records ================================================================================ */ /* -------------------------------------------------------------------------------- Save the Creator record -------------------------------------------------------------------------------- */ public function actionSaveCreator() { $this->requirePostRequest(); $locale = craft()->request->getPost('locale'); if (!$locale) $locale = craft()->language; $record = Seomatic_SettingsRecord::model()->findByAttributes(array( 'locale' => $locale, )); if (!$record) { throw new Exception(Craft::t('No SEOmatic Settings record exists')); } /* -- Set the Creator attributes, defaulting to the existing values for whatever is missing from the post data */ $record->googleSiteVerification = craft()->request->getPost('googleSiteVerification', $record->googleSiteVerification); $record->siteCreatorType = craft()->request->getPost('siteCreatorType', $record->siteCreatorType); $record->siteCreatorSubType = craft()->request->getPost('siteCreatorSubType', $record->siteCreatorSubType); $record->siteCreatorSpecificType = craft()->request->getPost('siteCreatorSpecificType', $record->siteCreatorSpecificType); /* -- Generic Creator fields */ $record->genericCreatorName = craft()->request->getPost('genericCreatorName', $record->genericCreatorName); $record->genericCreatorAlternateName = craft()->request->getPost('genericCreatorAlternateName', $record->genericCreatorAlternateName); $record->genericCreatorDescription = craft()->seomatic->truncateStringOnWord(craft()->request->getPost('genericCreatorDescription', $record->genericCreatorDescription), 1024); $record->genericCreatorUrl = craft()->request->getPost('genericCreatorUrl', $record->genericCreatorUrl); $record->genericCreatorTelephone = craft()->request->getPost('genericCreatorTelephone', $record->genericCreatorTelephone); $record->genericCreatorEmail = craft()->request->getPost('genericCreatorEmail', $record->genericCreatorEmail); $record->genericCreatorStreetAddress = craft()->request->getPost('genericCreatorStreetAddress', $record->genericCreatorStreetAddress); $record->genericCreatorAddressLocality = craft()->request->getPost('genericCreatorAddressLocality', $record->genericCreatorAddressLocality); $record->genericCreatorAddressRegion = craft()->request->getPost('genericCreatorAddressRegion', $record->genericCreatorAddressRegion); $record->genericCreatorPostalCode = craft()->request->getPost('genericCreatorPostalCode', $record->genericCreatorPostalCode); $record->genericCreatorAddressCountry = craft()->request->getPost('genericCreatorAddressCountry', $record->genericCreatorAddressCountry); $record->genericCreatorGeoLatitude = craft()->request->getPost('genericCreatorGeoLatitude', $record->genericCreatorGeoLatitude); $record->genericCreatorGeoLongitude = craft()->request->getPost('genericCreatorGeoLongitude', $record->genericCreatorGeoLongitude); /* -- Corporation Creator fields http://schema.org/Organization */ $record->organizationCreatorDuns = craft()->request->getPost('organizationCreatorDuns', $record->organizationCreatorDuns); $record->organizationCreatorFounder = craft()->request->getPost('organizationCreatorFounder', $record->organizationCreatorFounder); $record->organizationCreatorFoundingDate = craft()->request->getPost('organizationCreatorFoundingDate', $record->organizationCreatorFoundingDate); $record->organizationCreatorFoundingLocation = craft()->request->getPost('organizationCreatorFoundingLocation', $record->organizationCreatorFoundingLocation); $record->organizationCreatorContactPoints = craft()->request->getPost('organizationCreatorContactPoints', array()); /* -- Person Creator fields https://schema.org/Person */ $record->personCreatorGender = craft()->request->getPost('personCreatorGender', $record->personCreatorGender); $record->personCreatorBirthPlace = craft()->request->getPost('personCreatorBirthPlace', $record->personCreatorBirthPlace); /* -- Corporation Creator fields http://schema.org/Corporation */ $record->corporationCreatorTickerSymbol = craft()->request->getPost('corporationCreatorTickerSymbol', $record->corporationCreatorTickerSymbol); /* -- Restaurant creator fields https://schema.org/Restaurant */ $record->restaurantCreatorServesCuisine = craft()->request->getPost('restaurantCreatorServesCuisine', $record->restaurantCreatorServesCuisine); $record->restaurantCreatorMenuUrl = craft()->request->getPost('restaurantCreatorMenuUrl', $record->restaurantCreatorMenuUrl); $record->restaurantCreatorReservationsUrl = craft()->request->getPost('restaurantCreatorReservationsUrl', $record->restaurantCreatorReservationsUrl); $record->genericCreatorImageId = craft()->request->getPost('genericCreatorImageId', $record->genericCreatorImageId); $assetId = (!empty($record->genericCreatorImageId) ? $record->genericCreatorImageId[0] : null); $record->genericCreatorImageId = $assetId; /* -- Humans.txt */ $record->genericCreatorHumansTxt = craft()->request->getPost('genericCreatorHumansTxt', $record->genericCreatorHumansTxt); if ($record->save()) { craft()->userSession->setNotice(Craft::t('SEOmatic Site Creator saved.')); $this->redirectToPostedUrl($record); } else { craft()->userSession->setError(Craft::t('Couldn’t save SEOmatic Site Creator.')); $this->redirectToPostedUrl($record); } } /* -- actionSaveCreator */ } /* -- class SeomaticController */ ================================================ FILE: elementtypes/Seomatic_MetaElementType.php ================================================ <?php namespace Craft; class Seomatic_MetaElementType extends BaseElementType { public function getName() { return Craft::t('Meta'); } /** * Returns whether this element type has content. * * @return bool */ public function hasContent() { return true; } /** * Returns whether this element type has titles. * * @return bool */ public function hasTitles() { return true; } /** * Returns whether this element type can have statuses. * * @return bool */ public function hasStatuses() { return false; } /** * Returns whether this element type is localized. * * @return bool */ public function isLocalized() { return true; } /** * Returns this element type's sources. * * @param string|null $context * @return array|false */ public function getSources($context = null) { $sources = array( '*' => array( 'label' => Craft::t('Template Metas'), 'criteria' => array('metaType' => '*') ), ); return $sources; } /** * @inheritDoc IElementType::getAvailableActions() * * @param string|null $source * * @return array|null */ public function getAvailableActions($source = null) { /* Not sure if I like this UI $deleteAction = craft()->elements->getAction('Delete'); $deleteAction->setParams( array( 'confirmationMessage' => Craft::t('Are you sure you want to delete the selected Template Metas?'), 'successMessage' => Craft::t('Forms deleted.'), ) ); return array($deleteAction); */ } /** * Returns the attributes that can be shown/sorted by in table views. * * @param string|null $source * @return array */ public function defineTableAttributes($source = null) { return array( 'title' => Craft::t('Title'), 'metaPath' => Craft::t('Template Path'), ); } /** * Returns the table view HTML for a given attribute. * * @param BaseElementModel $element * @param string $attribute * @return string */ public function getTableAttributeHtml(BaseElementModel $element, $attribute) { switch ($attribute) { case 'title': { return $element->$attribute; } case 'metaPath': { return $element->$attribute; } default: { return parent::getTableAttributeHtml($element, $attribute); } } } /** * Defines any custom element criteria attributes for this element type. * * @return array */ public function defineCriteriaAttributes() { return array( 'metaType' => array(AttributeType::Enum, 'values' => "default,template", 'default' => '*'), ); } /** * Modifies an element query targeting elements of this type. * * @param DbCommand $query * @param ElementCriteriaModel $criteria * @return mixed */ public function modifyElementsQuery(DbCommand $query, ElementCriteriaModel $criteria) { /* $query ->addSelect('seomatic_meta.*') ->join('seomatic_meta seomatic_meta', 'seomatic_meta.id = elements.id'); */ /* if ($criteria->metaType) { $query->andWhere(DbHelper::parseParam('seomatic_meta.metaType', $criteria->metaType, $query->params)); } */ $query ->addSelect('seomatic_meta.*') ->join('seomatic_meta seomatic_meta', 'seomatic_meta.elementid = elements.id') ->andWhere(DbHelper::parseParam('seomatic_meta.locale', $criteria->locale, $query->params)); } /** * Populates an element model based on a query result. * * @param array $row * @return array */ public function populateElementModel($row) { return Seomatic_MetaModel::populateModel($row); } /** * Returns the HTML for an editor HUD for the given element. * * @param BaseElementModel $element * @return string */ /* public function getEditorHtml(BaseElementModel $element) { // Start/End Dates $html = craft()->templates->render('semomatic/_edit', array( 'element' => $element, )); // Everything else $html .= parent::getEditorHtml($element); return $html; } */ } /* -- class Seomatic_MetaElementType */ ================================================ FILE: fieldtypes/Seomatic_MetaFieldType.php ================================================ <?php namespace Craft; /** * Seomatic Meta field type */ class Seomatic_MetaFieldType extends BaseFieldType { public function getName() { return Craft::t('SEOmatic Meta'); } public function defineContentAttribute() { return AttributeType::Mixed; } public function getInputHtml($name, $value) { if (isset($this->element)) { $id = craft()->templates->formatInputId($name); $namespacedId = craft()->templates->namespaceInputId($id); // Include our Javascript & CSS craft()->templates->includeCssResource('seomatic/css/css-reset.css'); craft()->templates->includeCssResource('seomatic/css/prism.min.css'); craft()->templates->includeCssResource('seomatic/css/bootstrap-tokenfield.css'); craft()->templates->includeCssResource('seomatic/css/style.css'); craft()->templates->includeCssResource('seomatic/css/field.css'); craft()->templates->includeJsResource('seomatic/js/main_entity_type_list.js'); craft()->templates->includeJs("var metaFieldPrefix='" . $namespacedId . "';"); craft()->templates->includeJsResource('seomatic/js/meta.js'); craft()->templates->includeJsResource('seomatic/js/field.js'); craft()->templates->includeJsResource('seomatic/js/jquery.bpopup.min.js'); craft()->templates->includeJsResource('seomatic/js/prism.min.js'); craft()->templates->includeJsResource('seomatic/js/bootstrap-tokenfield.min.js'); $variables = array( 'id' => $id, 'name' => $name, 'meta' => $value, 'element' => $this->element, 'field' => $this->model, ); $jsonVars = array( 'id' => $id, 'name' => $name, 'namespace' => $namespacedId, 'prefix' => craft()->templates->namespaceInputId(""), ); if (isset($variables['locale'])) $locale = $variables['locale']; else $locale = craft()->language; $siteMeta = craft()->seomatic->getSiteMeta($locale); $titleLength = craft()->config->get("maxTitleLength", "seomatic"); if ($siteMeta['siteSeoTitlePlacement'] == "none") $variables['titleLength'] = $titleLength; else $variables['titleLength'] = ($titleLength - strlen(" | ") - strlen($siteMeta['siteSeoName'])); /* -- Prep some parameters */ // Whether any assets sources exist $sources = craft()->assets->findFolders(); $variables['assetsSourceExists'] = count($sources); // URL to create a new assets source $variables['newAssetsSourceUrl'] = UrlHelper::getUrl('settings/assets/sources/new'); // Set asset ID $variables['seoImageId'] = $variables['meta']->seoImageId; // Set asset elements if ($variables['seoImageId']) { if (is_array($variables['seoImageId'])) { $variables['seoImageId'] = $variables['seoImageId'][0]; } $asset = craft()->elements->getElementById($variables['seoImageId']); $variables['elements'] = array($asset); } else { $variables['elements'] = array(); } // Set asset ID $variables['seoTwitterImageId'] = $variables['meta']->seoTwitterImageId; // Set asset elements if ($variables['seoTwitterImageId']) { if (is_array($variables['seoTwitterImageId'])) { $variables['seoTwitterImageId'] = $variables['seoTwitterImageId'][0]; } $asset = craft()->elements->getElementById($variables['seoTwitterImageId']); $variables['elementsTwitter'] = array($asset); } else { $variables['elementsTwitter'] = array(); } // Set asset ID $variables['seoFacebookImageId'] = $variables['meta']->seoFacebookImageId; // Set asset elements if ($variables['seoFacebookImageId']) { if (is_array($variables['seoFacebookImageId'])) { $variables['seoFacebookImageId'] = $variables['seoFacebookImageId'][0]; } $asset = craft()->elements->getElementById($variables['seoFacebookImageId']); $variables['elementsFacebook'] = array($asset); } else { $variables['elementsFacebook'] = array(); } // Set element type $variables['elementType'] = craft()->elements->getElementType(ElementType::Asset); $variables['assetSources'] = $this->getSettings()->assetSources; $variables['seoTitleSourceChangeable'] = $this->getSettings()->seoTitleSourceChangeable; $variables['seoDescriptionSourceChangeable'] = $this->getSettings()->seoDescriptionSourceChangeable; $variables['seoKeywordsSourceChangeable'] = $this->getSettings()->seoKeywordsSourceChangeable; $variables['seoImageIdSourceChangeable'] = $this->getSettings()->seoImageIdSourceChangeable; $variables['seoTwitterImageIdSourceChangeable'] = $this->getSettings()->seoTwitterImageIdSourceChangeable; $variables['seoFacebookImageIdSourceChangeable'] = $this->getSettings()->seoFacebookImageIdSourceChangeable; $variables['twitterCardTypeChangeable'] = $this->getSettings()->twitterCardTypeChangeable; $variables['openGraphTypeChangeable'] = $this->getSettings()->openGraphTypeChangeable; $variables['robotsChangeable'] = $this->getSettings()->robotsChangeable; $variables['transformsList'] = craft()->seomatic->getTransformsList(); /* -- Extract a list of the other plain text fields that are in this entry's layout */ $fieldList = array('title' => 'Title'); $fieldData = array('title' => $this->element->content['title']); $fieldImage = array(); $imageFieldList = array(); $fieldLayouts = $this->element->fieldLayout->getFields(); foreach ($fieldLayouts as $fieldLayout) { $field = craft()->fields->getFieldById($fieldLayout->fieldId); if (!empty($field) && !empty($field->handle)) { switch ($field->type) { case "PlainText": case "RichText": case "RedactorI": case "PreparseField_Preparse": $fieldList[$field->handle] = $field->name; $fieldData[$field->handle] = craft()->seomatic->truncateStringOnWord( strip_tags($this->element->content[$field->handle]), 200); break; case "Neo": $fieldList[$field->handle] = $field->name; $fieldData[$field->handle] = craft()->seomatic->truncateStringOnWord( craft()->seomatic->extractTextFromNeo($this->element[$field->handle]), 200); break; case "Matrix": $fieldList[$field->handle] = $field->name; $fieldData[$field->handle] = craft()->seomatic->truncateStringOnWord( craft()->seomatic->extractTextFromMatrix($this->element[$field->handle]), 200); break; case "Tags": $fieldList[$field->handle] = $field->name; $fieldData[$field->handle] = craft()->seomatic->truncateStringOnWord( craft()->seomatic->extractTextFromTags($this->element[$field->handle]), 200); break; case "FocusPoint_FocusPoint": case "Assets": $imageFieldList[$field->handle] = $field->name; $img = $this->element[$field->handle]->first(); if ($img) { $fieldImage[$field->handle] = $img->url; } break; } } } $variables['fieldList'] = $fieldList; $variables['imageFieldList'] = $imageFieldList; $variables['elementId'] = $this->element->id; $jsonVars['fieldData'] = $fieldData; $jsonVars['fieldImage'] = $fieldImage; $jsonVars['missing_image'] = UrlHelper::getResourceUrl('seomatic/images/missing_image.png'); $jsonVars = json_encode($jsonVars); craft()->templates->includeJs("$('#{$namespacedId}').SeomaticFieldType(" . $jsonVars . ");"); return craft()->templates->render('seomatic/field', $variables); } } /** * Define our settings * @return none */ protected function defineSettings() { return array( 'assetSources' => AttributeType::Mixed, 'seoMainEntityCategory' => array(AttributeType::String, 'default' => 'CreativeWork'), 'seoMainEntityOfPage' => array(AttributeType::String, 'default' => 'WebPage'), 'seoTitle' => AttributeType::String, 'seoTitleSource' => array(AttributeType::String, 'default' => 'field'), 'seoTitleSourceField' => array(AttributeType::String, 'default' => 'title'), 'seoTitleSourceChangeable' => array(AttributeType::Bool, 'default' => 1), 'seoDescription' => AttributeType::String, 'seoDescriptionSource' => AttributeType::String, 'seoDescriptionSourceField' => AttributeType::String, 'seoDescriptionSourceChangeable' => array(AttributeType::Bool, 'default' => 1), 'seoKeywords' => AttributeType::String, 'seoKeywordsSource' => AttributeType::String, 'seoKeywordsSourceField' => AttributeType::String, 'seoKeywordsSourceChangeable' => array(AttributeType::Bool, 'default' => 1), 'seoImageIdSource' => AttributeType::String, 'seoImageIdSourceField' => AttributeType::String, 'seoImageIdSourceChangeable' => array(AttributeType::Bool, 'default' => 1), 'seoImageTransform' => AttributeType::String, 'twitterCardType' => AttributeType::String, 'twitterCardTypeChangeable' => array(AttributeType::Bool, 'default' => 1), 'seoTwitterImageIdSource' => AttributeType::String, 'seoTwitterImageIdSourceField' => AttributeType::String, 'seoTwitterImageIdSourceChangeable' => array(AttributeType::Bool, 'default' => 1), 'seoTwitterImageTransform' => AttributeType::String, 'openGraphType' => AttributeType::String, 'openGraphTypeChangeable' => array(AttributeType::Bool, 'default' => 1), 'seoFacebookImageIdSource' => AttributeType::String, 'seoFacebookImageIdSourceField' => AttributeType::String, 'seoFacebookImageIdSourceChangeable' => array(AttributeType::Bool, 'default' => 1), 'seoFacebookImageTransform' => AttributeType::String, 'robots' => AttributeType::String, 'robotsChangeable' => array(AttributeType::Bool, 'default' => 1), ); } /** * Render the field settings * @return none */ public function getSettingsHtml() { $locale = craft()->language; $siteMeta = craft()->seomatic->getSiteMeta($locale); $fields = craft()->fields->getAllFields(); $fieldList = array('title' => 'Title'); $imageFieldList = array(); foreach ($fields as $field) { switch ($field->type) { case "PlainText": case "RichText": case "RedactorI": case "PreparseField_Preparse": $fieldList[$field->handle] = $field->name; break; case "Matrix": $fieldList[$field->handle] = $field->name; break; case "Neo": $fieldList[$field->handle] = $field->name; break; case "Tags": $fieldList[$field->handle] = $field->name; break; case "FocusPoint_FocusPoint": case "Assets": $imageFieldList[$field->handle] = $field->name; break; } } $titleLength = craft()->config->get("maxTitleLength", "seomatic"); if ($siteMeta['siteSeoTitlePlacement'] == "none") $titleLength = $titleLength; else $titleLength = ($titleLength - strlen(" | ") - strlen($siteMeta['siteSeoName'])); craft()->templates->includeCssResource('seomatic/css/bootstrap-tokenfield.css'); craft()->templates->includeCssResource('seomatic/css/style.css'); craft()->templates->includeCssResource('seomatic/css/field.css'); craft()->templates->includeJsResource('seomatic/js/main_entity_type_list.js'); craft()->templates->includeJs("var metaFieldPrefix='types-Seomatic_Meta-';"); craft()->templates->includeJsResource('seomatic/js/field_settings.js'); craft()->templates->includeJsResource('seomatic/js/meta.js'); craft()->templates->includeJsResource('seomatic/js/bootstrap-tokenfield.min.js'); $assetElementType = craft()->elements->getElementType(ElementType::Asset); return craft()->templates->render('seomatic/field_settings', array( 'assetSources' => $this->getElementSources($assetElementType), 'fieldList' => $fieldList, 'imageFieldList' => $imageFieldList, 'titleLength' => $titleLength, 'transformsList' => craft()->seomatic->getTransformsList(), 'settings' => $this->getSettings() )); } /** * [prepValueFromPost description] * @param [type] $value [description] * @return none n/a */ public function prepValueFromPost($value) { $result = null; if (empty($value)) { $value = $this->prepValue($value); } else { $value = new Seomatic_MetaFieldModel($value); $value = $this->prepValue($value); } /* -- Handle pulling values from other fields */ $element = $this->element; if ($value->seoTitleUnparsed == "") $value->seoTitleUnparsed = $value->seoTitle; if ($value->seoDescriptionUnparsed == "") $value->seoDescriptionUnparsed = $value->seoDescription; if ($value->seoKeywordsUnparsed == "") $value->seoKeywordsUnparsed = $value->seoKeywords; /* -- If we're attached to a Commerce_Product element, always have the Main Enity of Page be a Product */ $elemType = $element->getElementType(); if ($elemType == "Commerce_Product") { $value->seoMainEntityCategory = "Product"; $value->seoMainEntityOfPage = ""; } if ($element) { /* -- Swap in any SEOmatic fields that are pulling from other entry fields */ switch ($value->seoTitleSource) { case 'field': if (isset($element[$value->seoTitleSourceField])) { $value->seoTitle = craft()->seomatic->getTextFromEntryField($element[$value->seoTitleSourceField]); if (craft()->config->get("truncateTitleTags", "seomatic")) { $truncLength = craft()->config->get("maxTitleLength", "seomatic"); $value->seoTitle = craft()->seomatic->truncateStringOnWord($value->seoTitle, $truncLength); } } break; case 'custom': $value->seoTitle = craft()->seomatic->parseAsTemplate($value->seoTitleUnparsed, $element); break; } switch ($value->seoDescriptionSource) { case 'field': if (isset($element[$value->seoDescriptionSourceField])) { $value->seoDescription = craft()->seomatic->getTextFromEntryField($element[$value->seoDescriptionSourceField]); if (craft()->config->get("truncateDescriptionTags", "seomatic")) { $truncLength = craft()->config->get("maxDescriptionLength", "seomatic"); $value->seoDescription = craft()->seomatic->truncateStringOnWord($value->seoDescription, $truncLength); } } break; case 'custom': $value->seoDescription = craft()->seomatic->parseAsTemplate($value->seoDescriptionUnparsed, $element); break; } switch ($value->seoKeywordsSource) { case 'field': if (isset($element[$value->seoKeywordsSourceField])) { $value->seoKeywords = craft()->seomatic->getTextFromEntryField($element[$value->seoKeywordsSourceField]); if (craft()->config->get("truncateKeywordsTags", "seomatic")) { $truncLength = craft()->config->get("maxKeywordsLength", "seomatic"); $value->seoKeywords = craft()->seomatic->truncateStringOnWord($value->seoKeywords, $truncLength); } } break; case 'keywords': if (isset($element[$value->seoKeywordsSourceField])) { $text = craft()->seomatic->getTextFromEntryField($element[$value->seoKeywordsSourceField]); $value->seoKeywords = craft()->seomatic->extractKeywords($text); } break; case 'custom': $value->seoKeywords = craft()->seomatic->parseAsTemplate($value->seoKeywordsUnparsed, $element); break; } switch ($value->seoImageIdSource) { case 'field': if (isset($element[$value->seoImageIdSourceField]) && isset($element[$value->seoImageIdSourceField][0])) { $value->seoImageId = $element[$value->seoImageIdSourceField][0]->id; } break; } switch ($value->seoTwitterImageIdSource) { case 'field': if (isset($element[$value->seoTwitterImageIdSourceField]) && isset($element[$value->seoTwitterImageIdSourceField][0])) { $value->seoTwitterImageId = $element[$value->seoTwitterImageIdSourceField][0]->id; } break; } switch ($value->seoFacebookImageIdSource) { case 'field': if (isset($element[$value->seoFacebookImageIdSourceField]) && isset($element[$value->seoFacebookImageIdSourceField][0])) { $value->seoFacebookImageId = $element[$value->seoFacebookImageIdSourceField][0]->id; } break; } } return $value; } public function prepValue($value) { if (!$value) { $value = new Seomatic_MetaFieldModel(); $value->seoMainEntityCategory = $this->getSettings()->seoMainEntityCategory; $value->seoMainEntityOfPage = $this->getSettings()->seoMainEntityOfPage; $value->seoTitle = $this->getSettings()->seoTitle; $value->seoTitleUnparsed = $this->getSettings()->seoTitle; $value->seoTitleSource = $this->getSettings()->seoTitleSource; $value->seoTitleSourceField = $this->getSettings()->seoTitleSourceField; $value->seoDescription = $this->getSettings()->seoDescription; $value->seoDescriptionUnparsed = $this->getSettings()->seoDescription; $value->seoDescriptionSource = $this->getSettings()->seoDescriptionSource; $value->seoDescriptionSourceField = $this->getSettings()->seoDescriptionSourceField; $value->seoKeywords = $this->getSettings()->seoKeywords; $value->seoKeywordsUnparsed = $this->getSettings()->seoKeywords; $value->seoKeywordsSource = $this->getSettings()->seoKeywordsSource; $value->seoKeywordsSourceField = $this->getSettings()->seoKeywordsSourceField; $value->seoImageIdSource = $this->getSettings()->seoImageIdSource; $value->seoImageIdSourceField = $this->getSettings()->seoImageIdSourceField; $value->seoImageTransform = $this->getSettings()->seoImageTransform; $value->twitterCardType = $this->getSettings()->twitterCardType; $value->seoTwitterImageIdSource = $this->getSettings()->seoTwitterImageIdSource; $value->seoTwitterImageIdSourceField = $this->getSettings()->seoTwitterImageIdSourceField; $value->seoTwitterImageTransform = $this->getSettings()->seoTwitterImageTransform; $value->openGraphType = $this->getSettings()->openGraphType; $value->seoFacebookImageIdSource = $this->getSettings()->seoFacebookImageIdSource; $value->seoFacebookImageIdSourceField = $this->getSettings()->seoFacebookImageIdSourceField; $value->seoFacebookImageTransform = $this->getSettings()->seoFacebookImageTransform; $value->robots = $this->getSettings()->robots; } if (craft()->request->isSiteRequest()) { } return $value; } /** * @inheritDoc IFieldType::onAfterElementSave() * * @return null */ public function onAfterElementSave() { $element = $this->element; $content = $element->getContent(); $fieldHandle = $this->model->handle; $shouldResave = false; if (empty($fieldHandle)) $shouldResave = true; if (!isset($content[$fieldHandle])) $shouldResave = true; else { if (empty($content[$fieldHandle])) $shouldResave = true; } // We should always re-save here, in case they changed the source for some fields or such // if ($shouldResave) if (true) { if ($content) $defaultField = $this->prepValueFromPost($content[$fieldHandle]); else $defaultField = $this->prepValueFromPost(null); $content->setAttribute($fieldHandle, $defaultField); $element->setContent($content); craft()->content->saveContent($element); } parent::onAfterElementSave(); } /** * Returns sources avaible to an element type. * * @access protected * @return mixed */ protected function getElementSources($elementType) { $sources = array(); foreach ($elementType->getSources() as $key => $source) { if (!isset($source['heading'])) { $sources[] = array('label' => $source['label'], 'value' => $key); } } return $sources; } } /* -- Seomatic_MetaFieldType */ ================================================ FILE: migrations/m151225_000000_seomatic_addHumansField.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m151225_000000_seomatic_addHumansField extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'genericCreatorHumansTxt' => ColumnType::Text ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "personCreatorBirthPlace"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m151226_000000_seomatic_addTwitterFacebookFields.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m151226_000000_seomatic_addTwitterFacebookFields extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'twitterCardType' => ColumnType::Varchar, 'openGraphType' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_meta", $newColumns, "seoKeywords"); // specify columns and AttributeType $newColumns = array ( 'siteTwitterCardType' => ColumnType::Varchar, 'siteOpenGraphType' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "siteSeoKeywords"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160101_000000_seomatic_addRobotsFields.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160101_000000_seomatic_addRobotsFields extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'robots' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_meta", $newColumns, "openGraphType"); // specify columns and AttributeType $newColumns = array ( 'siteRobots' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "siteOpenGraphType"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160111_000000_seomatic_addTitleFields.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160111_000000_seomatic_addTitleFields extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'siteSeoTitleSeparator' => ColumnType::Varchar, 'siteSeoTitlePlacement' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "siteSeoTitle"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160122_000000_seomatic_addTypeFields.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160122_000000_seomatic_addTypeFields extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'siteOwnerSubType' => ColumnType::Varchar, 'siteOwnerSpecificType' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "siteOwnerType"); // specify columns and AttributeType $newColumns = array ( 'siteCreatorSubType' => ColumnType::Varchar, 'siteCreatorSpecificType' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "siteCreatorType"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160123_000000_seomatic_addOpeningHours.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160123_000000_seomatic_addOpeningHours extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'localBusinessOwnerOpeningHours' => ColumnType::Text, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "organizationOwnerFoundingLocation"); // specify columns and AttributeType $newColumns = array ( 'localBusinessCreatorOpeningHours' => ColumnType::Text, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "organizationCreatorFoundingLocation"); // specify columns and AttributeType $newColumns = array ( 'restaurantCreatorServesCuisine' => ColumnType::Varchar, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "corporationCreatorTickerSymbol"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160202_000000_seomatic_addSocialHandles.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160202_000000_seomatic_addSocialHandles extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'youtubeChannelHandle' => ColumnType::Varchar, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "youtubeHandle"); // specify columns and AttributeType $newColumns = array ( 'githubHandle' => ColumnType::Varchar, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "pinterestHandle"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160204_000000_seomatic_addGoogleAnalytics.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160204_000000_seomatic_addGoogleAnalytics extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'googleAnalyticsUID' => ColumnType::Varchar, 'googleAnalyticsAdvertising' => ColumnType::Bool, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "googleSiteVerification"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160205_000000_seomatic_addResturantMenu.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160205_000000_seomatic_addResturantMenu extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'restaurantOwnerMenuUrl' => ColumnType::Varchar, 'restaurantOwnerReservationsUrl' => ColumnType::Varchar, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "restaurantOwnerServesCuisine"); // specify columns and AttributeType $newColumns = array ( 'restaurantCreatorMenuUrl' => ColumnType::Varchar, 'restaurantCreatorReservationsUrl' => ColumnType::Varchar, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "restaurantCreatorServesCuisine"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160206_000000_seomatic_addGoogleAnalyticsPlugins.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160206_000000_seomatic_addGoogleAnalyticsPlugins extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'googleAnalyticsEcommerce' => ColumnType::Bool, 'googleAnalyticsEEcommerce' => ColumnType::Bool, 'googleAnalyticsLinkAttribution' => ColumnType::Bool, 'googleAnalyticsLinker' => ColumnType::Bool, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "googleAnalyticsAdvertising"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160206_000000_seomatic_addGoogleAnalyticsSendPageView.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160206_000000_seomatic_addGoogleAnalyticsSendPageView extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'googleAnalyticsSendPageview' => ColumnType::Bool, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "googleAnalyticsUID"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160209_000000_seomatic_alterDescriptionsColumns.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160209_000000_seomatic_alterDescriptionsColumns extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { $this->alterColumn('seomatic_settings', 'genericOwnerDescription', array(ColumnType::Varchar, 'maxLength' => 1024)); $this->alterColumn('seomatic_settings', 'genericCreatorDescription', array(ColumnType::Varchar, 'maxLength' => 1024)); // return true and let craft know its done return true; } } ================================================ FILE: migrations/m160209_000001_seomatic_addRobotsTxt.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160209_000001_seomatic_addRobotsTxt extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'siteRobotsTxt' => ColumnType::Text ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "siteRobots"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160227_000000_seomatic_addFacebookAppId.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160227_000000_seomatic_addFacebookAppId extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'facebookAppId' => ColumnType::Varchar, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "facebookProfileId"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160416_000000_seomatic_addContactPoints.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160416_000000_seomatic_addContactPoints extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'organizationOwnerContactPoints' => ColumnType::Text, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "organizationOwnerFoundingLocation"); // specify columns and AttributeType $newColumns = array ( 'organizationCreatorContactPoints' => ColumnType::Text, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "organizationCreatorFoundingLocation"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160509_000000_seomatic_addSiteLinksBing.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160509_000000_seomatic_addSiteLinksBing extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'siteLinksSearchTargets' => ColumnType::Text, 'siteLinksQueryInput' => ColumnType::Varchar, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "siteRobotsTxt"); // specify columns and AttributeType $newColumns = array ( 'bingSiteVerification' => ColumnType::Varchar, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "googleSiteVerification"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160707_000000_seomatic_addGoogleTagManager.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160707_000000_seomatic_addGoogleTagManager extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'googleTagManagerID' => ColumnType::Varchar, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "googleAnalyticsUID"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160715_000000_seomatic_addSeoImageTransforms.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160715_000000_seomatic_addSeoImageTransforms extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // Trim the fat $this->alterColumn('seomatic_settings', 'siteSeoTitleSeparator', array(ColumnType::Varchar, 'maxLength' => 10)); $this->alterColumn('seomatic_settings', 'siteRobots', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'siteTwitterCardType', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'siteOpenGraphType', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'siteLinksQueryInput', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'googleSiteVerification', array(ColumnType::Varchar, 'maxLength' => 100)); $this->alterColumn('seomatic_settings', 'bingSiteVerification', array(ColumnType::Varchar, 'maxLength' => 100)); $this->alterColumn('seomatic_settings', 'googleAnalyticsUID', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'googleTagManagerID', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'siteOwnerType', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'siteOwnerSubType', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'siteOwnerSpecificType', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'twitterHandle', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'facebookHandle', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'facebookProfileId', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'facebookAppId', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'linkedInHandle', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'googlePlusHandle', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'youtubeHandle', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'youtubeChannelHandle', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'instagramHandle', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'pinterestHandle', array(ColumnType::Varchar, 'maxLength' => 50)); $this->alterColumn('seomatic_settings', 'githubHandle', array(ColumnType::Varchar, 'maxLength' => 50)); // specify columns and AttributeType $newColumns = array ( 'seoImageTransform' => ColumnType::Varchar, 'seoFacebookImageTransform' => ColumnType::Varchar, 'seoTwitterImageTransform' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_meta", $newColumns, "seoKeywords"); // specify columns and AttributeType $newColumns = array ( 'siteSeoImageTransform' => ColumnType::Varchar, 'siteSeoFacebookImageTransform' => ColumnType::Varchar, 'siteSeoTwitterImageTransform' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "siteSeoKeywords"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160723_000000_seomatic_addSeoMainEntityOfPage.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160723_000000_seomatic_addSeoMainEntityOfPage extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'seoMainEntityOfPage' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_meta", $newColumns, "metaPath"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160724_000000_seomatic_addSeoMainEntityCategory.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160724_000000_seomatic_addSeoMainEntityCategory extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'seoMainEntityCategory' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_meta", $newColumns, "metaPath"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160811_000000_seomatic_addVimeo.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160811_000000_seomatic_addVimeo extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'vimeoHandle' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "githubHandle"); $this->alterColumn('seomatic_settings', 'vimeoHandle', array(ColumnType::Varchar, 'maxLength' => 50)); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m160904_000000_seomatic_addTwitterFacebookImages.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m160904_000000_seomatic_addTwitterFacebookImages extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'seoTwitterImageId' => ColumnType::Int, 'seoFacebookImageId' => ColumnType::Int ); $this->_addColumnsAfter("seomatic_meta", $newColumns, "seoImageId"); // specify columns and AttributeType $newColumns = array ( 'siteSeoTwitterImageId' => ColumnType::Int, 'siteSeoFacebookImageId' => ColumnType::Int ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "siteSeoImageId"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => true, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m161220_000000_seomatic_addPriceRange.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m161220_000000_seomatic_addPriceRange extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'localBusinessPriceRange' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "organizationOwnerContactPoints"); $this->alterColumn('seomatic_settings', 'localBusinessPriceRange', array(ColumnType::Varchar, 'maxLength' => 10)); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m170212_000000_seomatic_addGoogleAnalyticsAnonymizeIp.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m170212_000000_seomatic_addGoogleAnalyticsAnonymizeIp extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'googleAnalyticsAnonymizeIp' => ColumnType::Bool, ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "googleAnalyticsLinker"); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: migrations/m170212_000000_seomatic_addWikipedia.php ================================================ <?php namespace Craft; /** * The class name is the UTC timestamp in the format of mYYMMDD_HHMMSS_pluginHandle_migrationName */ class m170212_000000_seomatic_addWikipedia extends BaseMigration { /** * Any migration code in here is wrapped inside of a transaction. * * @return bool */ public function safeUp() { // specify columns and AttributeType $newColumns = array ( 'wikipediaUrl' => ColumnType::Varchar ); $this->_addColumnsAfter("seomatic_settings", $newColumns, "vimeoHandle"); $this->alterColumn('seomatic_settings', 'wikipediaUrl', array(ColumnType::Varchar, 'maxLength' => 100)); // return true and let craft know its done return true; } private function _addColumnsAfter($tableName, $newColumns, $afterColumnHandle) { // this is a foreach loop, enough said foreach ($newColumns as $columnName => $columnType) { // check if the column does NOT exist if (!craft()->db->columnExists($tableName, $columnName)) { $this->addColumnAfter($tableName, $columnName, array( 'column' => $columnType, 'null' => false, ), $afterColumnHandle ); // log that we created the new column SeomaticPlugin::log("Created the `$columnName` in the `$tableName` table.", LogLevel::Info, true); } // if the column already exists in the table else { // tell craft that we couldn't create the column as it alredy exists. SeomaticPlugin::log("Column `$columnName` already exists in the `$tableName` table.", LogLevel::Info, true); } } } } ================================================ FILE: models/Seomatic_CreatorModel.php ================================================ <?php namespace Craft; class Seomatic_CreatorModel extends BaseModel { /** * @access protected * @return array */ protected function defineAttributes() { return array_merge(parent::defineAttributes(), array( 'locale' => array(AttributeType::String, 'default' => ''), 'siteCreatorType' => array(AttributeType::String, 'default' => 'Organization'), 'siteCreatorSubType' => array(AttributeType::String, 'default' => 'Corporation'), 'siteCreatorSpecificType' => array(AttributeType::String, 'default' => ''), /* -- Generic Creator fields */ 'genericCreatorName' => array(AttributeType::String, 'default' => ''), 'genericCreatorAlternateName' => array(AttributeType::String, 'default' => ''), 'genericCreatorDescription' => array(AttributeType::String, 'default' => ''), 'genericCreatorUrl' => array(AttributeType::String, 'default' => ''), 'genericCreatorImageId' => array(AttributeType::String, 'default' => ''), 'genericCreatorTelephone' => array(AttributeType::String, 'default' => ''), 'genericCreatorEmail' => array(AttributeType::String, 'default' => ''), 'genericCreatorStreetAddress' => array(AttributeType::String, 'default' => ''), 'genericCreatorAddressLocality' => array(AttributeType::String, 'default' => ''), 'genericCreatorAddressRegion' => array(AttributeType::String, 'default' => ''), 'genericCreatorPostalCode' => array(AttributeType::String, 'default' => ''), 'genericCreatorAddressCountry' => array(AttributeType::String, 'default' => ''), 'genericCreatorGeoLatitude' => array(AttributeType::String, 'default' => ''), 'genericCreatorGeoLongitude' => array(AttributeType::String, 'default' => ''), /* -- Corporation Creator fields http://schema.org/Organization */ 'organizationCreatorDuns' => array(AttributeType::String, 'default' => ''), 'organizationCreatorFounder' => array(AttributeType::String, 'default' => ''), 'organizationCreatorFoundingDate' => array(AttributeType::String, 'default' => ''), 'organizationCreatorFoundingLocation' => array(AttributeType::String, 'default' => ''), /* -- Person Creator fields https://schema.org/Person */ 'personCreatorGender' => array(AttributeType::String, 'default' => ''), 'personCreatorBirthPlace' => array(AttributeType::String, 'default' => ''), /* -- Corporation Creator fields http://schema.org/Corporation */ 'corporationCreatorTickerSymbol' => array(AttributeType::String, 'default' => ''), )); } } /* -- class Seomatic_CreatorModel */ ================================================ FILE: models/Seomatic_IdentityModel.php ================================================ <?php namespace Craft; class Seomatic_IdentityModel extends BaseModel { /** * @access protected * @return array */ protected function defineAttributes() { return array_merge(parent::defineAttributes(), array( 'locale' => array(AttributeType::String, 'default' => ''), 'googleSiteVerification' => array(AttributeType::String, 'default' => ''), 'siteOwnerType' => array(AttributeType::String, 'default' => 'Organization'), 'siteOwnerSubType' => array(AttributeType::String, 'default' => 'Corporation'), 'siteOwnerSpecificType' => array(AttributeType::String, 'default' => ''), /* -- Generic owner fields */ 'genericOwnerName' => array(AttributeType::String, 'default' => ''), 'genericOwnerAlternateName' => array(AttributeType::String, 'default' => ''), 'genericOwnerDescription' => array(AttributeType::String, 'default' => ''), 'genericOwnerUrl' => array(AttributeType::String, 'default' => ''), 'genericOwnerImageId' => array(AttributeType::String, 'default' => ''), 'genericOwnerTelephone' => array(AttributeType::String, 'default' => ''), 'genericOwnerEmail' => array(AttributeType::String, 'default' => ''), 'genericOwnerStreetAddress' => array(AttributeType::String, 'default' => ''), 'genericOwnerAddressLocality' => array(AttributeType::String, 'default' => ''), 'genericOwnerAddressRegion' => array(AttributeType::String, 'default' => ''), 'genericOwnerPostalCode' => array(AttributeType::String, 'default' => ''), 'genericOwnerAddressCountry' => array(AttributeType::String, 'default' => ''), 'genericOwnerGeoLatitude' => array(AttributeType::String, 'default' => ''), 'genericOwnerGeoLongitude' => array(AttributeType::String, 'default' => ''), /* -- Corporation owner fields http://schema.org/Organization */ 'organizationOwnerDuns' => array(AttributeType::String, 'default' => ''), 'organizationOwnerFounder' => array(AttributeType::String, 'default' => ''), 'organizationOwnerFoundingDate' => array(AttributeType::String, 'default' => ''), 'organizationOwnerFoundingLocation' => array(AttributeType::String, 'default' => ''), /* -- Person owner fields https://schema.org/Person */ 'personOwnerGender' => array(AttributeType::String, 'default' => ''), 'personOwnerBirthPlace' => array(AttributeType::String, 'default' => ''), /* -- Corporation owner fields http://schema.org/Corporation */ 'corporationOwnerTickerSymbol' => array(AttributeType::String, 'default' => ''), /* -- Restaurant owner fields https://schema.org/Restaurant */ 'restaurantOwnerServesCuisine' => array(AttributeType::String, 'default' => ''), )); } } /* -- class Seomatic_IdentityModel */ ================================================ FILE: models/Seomatic_MetaFieldModel.php ================================================ <?php namespace Craft; class Seomatic_MetaFieldModel extends Seomatic_MetaModel { protected $elementType = 'Seomatic_FieldMeta'; /** * @access protected * @return array */ protected function defineAttributes() { return array_merge(parent::defineAttributes(), array( 'canonicalUrlOverride' => array(AttributeType::String, 'default' => ''), 'seoTitleUnparsed' => array(AttributeType::String, 'default' => ''), 'seoDescriptionUnparsed' => array(AttributeType::String, 'default' => ''), 'seoKeywordsUnparsed' => array(AttributeType::String, 'default' => ''), 'seoTitleSource' => array(AttributeType::Enum, 'values' => "custom,field", 'default' => 'field'), 'seoTitleSourceField' => array(AttributeType::String, 'default' => 'title'), 'seoDescriptionSource' => array(AttributeType::Enum, 'values' => "custom,field", 'default' => 'custom'), 'seoDescriptionSourceField' => array(AttributeType::String, 'default' => ''), 'seoKeywordsSource' => array(AttributeType::Enum, 'values' => "custom,keywords,field", 'default' => 'custom'), 'seoKeywordsSourceField' => array(AttributeType::String, 'default' => ''), 'seoImageIdSource' => array(AttributeType::Enum, 'values' => "custom,field", 'default' => 'custom'), 'seoImageIdSourceField' => array(AttributeType::String, 'default' => ''), 'seoTwitterImageIdSource' => array(AttributeType::Enum, 'values' => "custom,field", 'default' => 'custom'), 'seoTwitterImageIdSourceField' => array(AttributeType::String, 'default' => ''), 'seoFacebookImageIdSource' => array(AttributeType::Enum, 'values' => "custom,field", 'default' => 'custom'), 'seoFacebookImageIdSourceField' => array(AttributeType::String, 'default' => ''), /* -- For Commerce products */ 'seoCommerceVariants' => array(AttributeType::Mixed), )); } /** * Returns the seoTitleUnparsed * * @return string */ public function seoTitleUnparsed() { return $this->seoTitleUnparsed; } /** * Returns the seoDescriptionUnparsed * * @return string */ public function seoDescriptionUnparsed() { return $this->seoDescriptionUnparsed; } /** * Returns the seoKeywordsUnparsed * * @return string */ public function seoKeywordsUnparsed() { return $this->seoKeywordsUnparsed; } /** * Returns the Main Entity of Page JSON-LD for the entry, without mainEntryOfPage being set * * @return string */ public function getJsonLD($element) { $locale = craft()->language; if ($element) { $entryMeta = craft()->seomatic->getMetaFromElement($element); if ($entryMeta) $entryMeta = craft()->seomatic->setEntryMeta($entryMeta, $element->url); } $metaVars = craft()->seomatic->getGlobals('', $locale); $result = craft()->seomatic->getMainEntityOfPageJSONLD($entryMeta, $metaVars['seomaticIdentity'], $locale, false); return $result; } /** * Returns whether the current user can edit the element. * * @return bool */ public function isEditable() { return false; } /** * Returns the element's CP edit URL. * * @return string|false */ public function getCpEditUrl() { return ""; } } /* -- class Seomatic_MetaFieldModel */ ================================================ FILE: models/Seomatic_MetaModel.php ================================================ <?php namespace Craft; class Seomatic_MetaModel extends BaseElementModel { protected $elementType = 'Seomatic_Meta'; /** * @access protected * @return array */ protected function defineAttributes() { return array_merge(parent::defineAttributes(), array( 'locale' => array(AttributeType::String, 'default' => craft()->language), 'elementId' => array(AttributeType::Number, 'default' => 0), 'metaType' => array(AttributeType::Enum, 'values' => "default,template", 'default' => 'template'), 'metaPath' => array(AttributeType::String, 'default' => ''), 'seoMainEntityCategory' => array(AttributeType::String, 'default' => 'CreativeWork'), 'seoMainEntityOfPage' => array(AttributeType::String, 'default' => 'WebPage'), 'seoTitle' => array(AttributeType::String, 'default' => ''), 'seoDescription' => array(AttributeType::String, 'default' => ''), 'seoKeywords' => array(AttributeType::String, 'default' => ''), 'seoImageTransform' => array(AttributeType::String, 'default' => ''), 'seoFacebookImageTransform' => array(AttributeType::String, 'default' => ''), 'seoTwitterImageTransform' => array(AttributeType::String, 'default' => ''), 'twitterCardType' => array(AttributeType::String, 'default' => ''), 'openGraphType' => array(AttributeType::String, 'default' => ''), 'robots' => array(AttributeType::String, 'default' => ''), 'seoImageId' => array(AttributeType::Number, 'default' => null), 'seoTwitterImageId' => array(AttributeType::Number, 'default' => null), 'seoFacebookImageId' => array(AttributeType::Number, 'default' => null), )); } /** * Returns whether the current user can edit the element. * * @return bool */ public function isEditable() { return true; } /** * Returns the element's CP edit URL. * * @return string|false */ public function getCpEditUrl() { $locale = (craft()->isLocalized() && $this->locale != craft()->language) ? '/' . $this->locale : ''; return UrlHelper::getCpUrl('seomatic/' . 'meta' . '/' . $this->id . $locale); } /** * Returns the seoTitle * * @return string */ public function seoTitle() { return $this->seoTitle; } /** * Returns the seoDescription * * @return string */ public function seoDescription() { return $this->seoDescription; } /** * Returns the seoKeywords * * @return string */ public function seoKeywords() { return $this->seoKeywords; } /** * Returns the seoImage as a url * * @return string */ public function seoImage() { $result = ""; if (isset($this->seoImageId)) { $image = craft()->assets->getFileById($this->seoImageId); if ($image) $result = $image->url; } return $result; } /** * Returns the seoImageId * * @return string */ public function seoImageId() { return $this->seoImageId; } } /* -- class Seomatic_MetaModel */ ================================================ FILE: models/Seomatic_SettingsModel.php ================================================ <?php namespace Craft; class Seomatic_SettingsModel extends BaseModel { /** * @access protected * @return array */ protected function defineAttributes() { return array_merge(parent::defineAttributes(), array( 'locale' => array(AttributeType::String, 'default' => craft()->language), /* -------------------------------------------------------------------------------- SITEMETA settings -------------------------------------------------------------------------------- */ 'siteSeoName' => array(AttributeType::String, 'default' => craft()->getSiteName()), 'siteSeoTitle' => array(AttributeType::String, 'default' => 'This is the default global title of the site pages.'), 'siteSeoTitleSeparator' => array(AttributeType::String, 'default' => '|'), 'siteSeoTitlePlacement' => array(AttributeType::Enum, 'values' => "before,after,none", 'default' => 'after'), 'siteSeoDescription' => array(AttributeType::String, 'default' => 'This is the default global natural language description of the content on the site pages.'), 'siteSeoKeywords' => array(AttributeType::String, 'default' => 'default,global,comma-separated,keywords'), 'siteTwitterCardType' => array(AttributeType::String, 'default' => 'summary'), 'siteOpenGraphType' => array(AttributeType::String, 'default' => 'website'), 'siteSeoImageId' => array(AttributeType::Number, 'default' => null), 'siteSeoTwitterImageId' => array(AttributeType::Number, 'default' => null), 'siteSeoFacebookImageId' => array(AttributeType::Number, 'default' => null), 'siteSeoImageTransform' => array(AttributeType::String, 'default' => ''), 'siteSeoFacebookImageTransform' => array(AttributeType::String, 'default' => ''), 'siteSeoTwitterImageTransform' => array(AttributeType::String, 'default' => ''), 'siteRobots' => array(AttributeType::String, 'default' => ''), 'siteRobotsTxt' => array(AttributeType::String, 'default' => $this->getDefaultRobots()), 'siteLinksSearchTargets' => array(AttributeType::Mixed, 'default' => ''), 'siteLinksQueryInput' => array(AttributeType::String, 'default' => ''), /* -------------------------------------------------------------------------------- IDENTITY settings -------------------------------------------------------------------------------- */ 'googleSiteVerification' => array(AttributeType::String, 'default' => ''), 'bingSiteVerification' => array(AttributeType::String, 'default' => ''), 'googleAnalyticsUID' => array(AttributeType::String, 'default' => ''), 'googleTagManagerID' => array(AttributeType::String, 'default' => ''), 'googleAnalyticsSendPageview' => array(AttributeType::Bool, 'default' => true), 'googleAnalyticsAdvertising' => array(AttributeType::Bool, 'default' => false), 'googleAnalyticsEcommerce' => array(AttributeType::Bool, 'default' => false), 'googleAnalyticsEEcommerce' => array(AttributeType::Bool, 'default' => false), 'googleAnalyticsLinkAttribution' => array(AttributeType::Bool, 'default' => false), 'googleAnalyticsLinker' => array(AttributeType::Bool, 'default' => false), 'googleAnalyticsAnonymizeIp' => array(AttributeType::Bool, 'default' => false), 'siteOwnerType' => array(AttributeType::String, 'default' => 'Organization'), 'siteOwnerSubType' => array(AttributeType::String, 'default' => 'Corporation'), 'siteOwnerSpecificType' => array(AttributeType::String, 'default' => ''), /* -- Generic owner fields */ 'genericOwnerName' => array(AttributeType::String, 'default' => craft()->getSiteName()), 'genericOwnerAlternateName' => array(AttributeType::String, 'default' => ''), 'genericOwnerDescription' => array(AttributeType::String, 'maxLength' => 1024, 'default' => ''), 'genericOwnerUrl' => array(AttributeType::String, 'default' => craft()->getSiteUrl()), 'genericOwnerImageId' => array(AttributeType::String, 'default' => ''), 'genericOwnerTelephone' => array(AttributeType::String, 'default' => ''), 'genericOwnerEmail' => array(AttributeType::String, 'default' => ''), 'genericOwnerStreetAddress' => array(AttributeType::String, 'default' => ''), 'genericOwnerAddressLocality' => array(AttributeType::String, 'default' => ''), 'genericOwnerAddressRegion' => array(AttributeType::String, 'default' => ''), 'genericOwnerPostalCode' => array(AttributeType::String, 'default' => ''), 'genericOwnerAddressCountry' => array(AttributeType::String, 'default' => ''), 'genericOwnerGeoLatitude' => array(AttributeType::String, 'default' => ''), 'genericOwnerGeoLongitude' => array(AttributeType::String, 'default' => ''), /* -- Corporation owner fields http://schema.org/Organization */ 'organizationOwnerDuns' => array(AttributeType::String, 'default' => ''), 'organizationOwnerFounder' => array(AttributeType::String, 'default' => ''), 'organizationOwnerFoundingDate' => array(AttributeType::String, 'default' => ''), 'organizationOwnerFoundingLocation' => array(AttributeType::String, 'default' => ''), 'organizationOwnerContactPoints' => array(AttributeType::Mixed, 'default' => ''), /* -- LocalBusiness owner fields https://schema.org/LocalBusiness */ 'localBusinessPriceRange' => array(AttributeType::String, 'maxLength' => 10, 'default' => '$$$'), 'localBusinessOwnerOpeningHours' => array(AttributeType::Mixed, 'default' => ''), /* -- Corporation owner fields http://schema.org/Corporation */ 'corporationOwnerTickerSymbol' => array(AttributeType::String, 'default' => ''), /* -- Restaurant owner fields https://schema.org/Restaurant */ 'restaurantOwnerServesCuisine' => array(AttributeType::String, 'default' => ''), 'restaurantOwnerMenuUrl' => array(AttributeType::String, 'default' => ''), 'restaurantOwnerReservationsUrl' => array(AttributeType::String, 'default' => ''), /* -- Person owner fields https://schema.org/Person */ 'personOwnerGender' => array(AttributeType::String, 'default' => ''), 'personOwnerBirthPlace' => array(AttributeType::String, 'default' => ''), /* -------------------------------------------------------------------------------- SOCIAL settings -------------------------------------------------------------------------------- */ 'twitterHandle' => array(AttributeType::String, 'default' => ''), 'facebookHandle' => array(AttributeType::String, 'default' => ''), 'facebookProfileId' => array(AttributeType::String, 'default' => ''), 'facebookAppId' => array(AttributeType::String, 'default' => ''), 'linkedInHandle' => array(AttributeType::String, 'default' => ''), 'googlePlusHandle' => array(AttributeType::String, 'default' => ''), 'youtubeHandle' => array(AttributeType::String, 'default' => ''), 'youtubeChannelHandle' => array(AttributeType::String, 'default' => ''), 'instagramHandle' => array(AttributeType::String, 'default' => ''), 'pinterestHandle' => array(AttributeType::String, 'default' => ''), 'githubHandle' => array(AttributeType::String, 'default' => ''), 'vimeoHandle' => array(AttributeType::String, 'default' => ''), 'wikipediaUrl' => array(AttributeType::String, 'default' => ''), /* -------------------------------------------------------------------------------- CEATOR settings -------------------------------------------------------------------------------- */ 'siteCreatorType' => array(AttributeType::String, 'default' => 'Organization'), 'siteCreatorSubType' => array(AttributeType::String, 'default' => 'Corporation'), 'siteCreatorSpecificType' => array(AttributeType::String, 'default' => ''), /* -- Generic Creator fields */ 'genericCreatorName' => array(AttributeType::String, 'default' => ''), 'genericCreatorAlternateName' => array(AttributeType::String, 'default' => ''), 'genericCreatorDescription' => array(AttributeType::String, 'maxLength' => 1024, 'default' => ''), 'genericCreatorUrl' => array(AttributeType::String, 'default' => ''), 'genericCreatorImageId' => array(AttributeType::String, 'default' => ''), 'genericCreatorTelephone' => array(AttributeType::String, 'default' => ''), 'genericCreatorEmail' => array(AttributeType::String, 'default' => ''), 'genericCreatorStreetAddress' => array(AttributeType::String, 'default' => ''), 'genericCreatorAddressLocality' => array(AttributeType::String, 'default' => ''), 'genericCreatorAddressRegion' => array(AttributeType::String, 'default' => ''), 'genericCreatorPostalCode' => array(AttributeType::String, 'default' => ''), 'genericCreatorAddressCountry' => array(AttributeType::String, 'default' => ''), 'genericCreatorGeoLatitude' => array(AttributeType::String, 'default' => ''), 'genericCreatorGeoLongitude' => array(AttributeType::String, 'default' => ''), /* -- Corporation Creator fields http://schema.org/Organization */ 'organizationCreatorDuns' => array(AttributeType::String, 'default' => ''), 'organizationCreatorFounder' => array(AttributeType::String, 'default' => ''), 'organizationCreatorFoundingDate' => array(AttributeType::String, 'default' => ''), 'organizationCreatorFoundingLocation' => array(AttributeType::String, 'default' => ''), 'organizationCreatorContactPoints' => array(AttributeType::Mixed, 'default' => ''), /* -- LocalBusiness Creator fields https://schema.org/LocalBusiness */ 'localBusinessCreatorOpeningHours' => array(AttributeType::Mixed, 'default' => ''), /* -- Corporation Creator fields http://schema.org/Corporation */ 'corporationCreatorTickerSymbol' => array(AttributeType::String, 'default' => ''), /* -- Restaurant Creator fields https://schema.org/Restaurant */ 'restaurantCreatorServesCuisine' => array(AttributeType::String, 'default' => ''), 'restaurantCreatorSMenuUrl' => array(AttributeType::String, 'default' => ''), 'restaurantCreatorSReservationsUrl' => array(AttributeType::String, 'default' => ''), /* -- Person Creator fields https://schema.org/Person */ 'personCreatorGender' => array(AttributeType::String, 'default' => ''), 'personCreatorBirthPlace' => array(AttributeType::String, 'default' => ''), /* -- Humans.txt */ 'genericCreatorHumansTxt' => array(AttributeType::String, 'default' => $this->getDefaultHumans()), )); } /* -------------------------------------------------------------------------------- Get the default Humans.txt template -------------------------------------------------------------------------------- */ public function getDefaultHumans() { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Return the Humans.txt default template */ $templateName = '_humansDefault'; $loader = new TemplateLoader; $template = $loader->getSource($templateName); method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); return $template; } /* -- _getDefaultHumans */ /* -------------------------------------------------------------------------------- Get the default robots.txt template -------------------------------------------------------------------------------- */ public function getDefaultRobots() { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Return the robots.txt default template */ $templateName = '_robotsDefault'; $loader = new TemplateLoader; $template = $loader->getSource($templateName); method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); return $template; } /* -- _getDefaultRobots */ } /* -- class Seomatic_SettingsModel */ ================================================ FILE: models/Seomatic_SiteMetaModel.php ================================================ <?php namespace Craft; class Seomatic_SiteMetaModel extends BaseModel { /** * @access protected * @return array */ protected function defineAttributes() { return array_merge(parent::defineAttributes(), array( 'locale' => array(AttributeType::String, 'default' => ''), 'siteSeoName' => array(AttributeType::String, 'default' => ''), 'siteSeoTitle' => array(AttributeType::String, 'default' => ''), 'siteSeoDescription' => array(AttributeType::String, 'default' => ''), 'siteSeoKeywords' => array(AttributeType::String, 'default' => ''), 'siteTwitterCardType' => array(AttributeType::String, 'default' => ''), 'siteOpenGraphType' => array(AttributeType::String, 'default' => ''), 'siteRobots' => array(AttributeType::String, 'default' => ''), 'siteSeoImageId' => array(AttributeType::Number, 'default' => null), )); } } /* -- class Seomatic_SiteMetaModel */ ================================================ FILE: models/Seomatic_SocialModel.php ================================================ <?php namespace Craft; class Seomatic_SocialModel extends BaseModel { /** * @access protected * @return array */ protected function defineAttributes() { return array_merge(parent::defineAttributes(), array( 'locale' => array(AttributeType::String, 'default' => ''), 'twitterHandle' => array(AttributeType::String, 'default' => ''), 'facebookHandle' => array(AttributeType::String, 'default' => ''), 'facebookProfileId' => array(AttributeType::String, 'default' => ''), 'linkedInHandle' => array(AttributeType::String, 'default' => ''), 'googlePlusHandle' => array(AttributeType::String, 'default' => ''), 'youtubeHandle' => array(AttributeType::String, 'default' => ''), 'instagramHandle' => array(AttributeType::String, 'default' => ''), 'pinterestHandle' => array(AttributeType::String, 'default' => ''), )); } } /* -- class Seomatic_SocialModel */ ================================================ FILE: records/Seomatic_MetaRecord.php ================================================ <?php namespace Craft; class Seomatic_MetaRecord extends BaseRecord { public function getTableName() { return 'seomatic_meta'; } protected function defineAttributes() { return array( 'locale' => array(AttributeType::String, 'default' => craft()->language), 'elementId' => array(AttributeType::Number, 'default' => 0), 'metaType' => array(AttributeType::Enum, 'values' => "default,template", 'default' => 'template'), 'metaPath' => array(AttributeType::String, 'default' => ''), 'seoMainEntityCategory' => array(AttributeType::String, 'default' => ''), 'seoMainEntityOfPage' => array(AttributeType::String, 'default' => ''), 'seoTitle' => array(AttributeType::String, 'default' => ''), 'seoDescription' => array(AttributeType::String, 'default' => ''), 'seoKeywords' => array(AttributeType::String, 'default' => ''), 'seoImageTransform' => array(AttributeType::String, 'default' => ''), 'seoFacebookImageTransform' => array(AttributeType::String, 'default' => ''), 'seoTwitterImageTransform' => array(AttributeType::String, 'default' => ''), 'twitterCardType' => array(AttributeType::String, 'default' => 'summary'), 'openGraphType' => array(AttributeType::String, 'default' => 'website'), 'robots' => array(AttributeType::String, 'default' => ''), /* -- This is defined in definteRelations() below, of note: You don’t need to specify the foreign key column name in BELONGS_TO relations (defaults to the relation name appended with “Id”) https://craftcms.com/docs/plugins/records 'seoImageId' => array(AttributeType::Number, 'default' => 0), */ ); } public function defineRelations() { return array( 'element' => array(static::BELONGS_TO, 'ElementRecord', 'id', 'required' => true, 'onDelete' => static::CASCADE), 'seoImage' => array(static::BELONGS_TO, 'AssetFileRecord'), /* -- "Id" is automatically appended */ 'seoTwitterImage' => array(static::BELONGS_TO, 'AssetFileRecord'), /* -- "Id" is automatically appended */ 'seoFacebookImage' => array(static::BELONGS_TO, 'AssetFileRecord'), /* -- "Id" is automatically appended */ ); } } /* -- class Seomatic_MetaRecord */ ================================================ FILE: records/Seomatic_SettingsRecord.php ================================================ <?php namespace Craft; class Seomatic_SettingsRecord extends BaseRecord { public function getTableName() { return 'seomatic_settings'; } protected function defineAttributes() { return array( 'locale' => array(AttributeType::String, 'default' => ''), /* -------------------------------------------------------------------------------- SITEMETA settings -------------------------------------------------------------------------------- */ 'siteSeoName' => array(AttributeType::String, 'default' => ''), 'siteSeoTitle' => array(AttributeType::String, 'default' => ''), 'siteSeoTitleSeparator' => array(AttributeType::String, 'maxLength' => 10, 'default' => '|'), 'siteSeoTitlePlacement' => array(AttributeType::Enum, 'values' => "before,after,none", 'default' => 'after'), 'siteSeoDescription' => array(AttributeType::String, 'default' => ''), 'siteSeoKeywords' => array(AttributeType::String, 'default' => ''), 'siteSeoImageTransform' => array(AttributeType::String, 'maxLength' => 100, 'default' => ''), 'siteSeoFacebookImageTransform' => array(AttributeType::String, 'maxLength' => 100, 'default' => ''), 'siteSeoTwitterImageTransform' => array(AttributeType::String, 'maxLength' => 100, 'default' => ''), 'siteTwitterCardType' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'siteOpenGraphType' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'siteRobots' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'siteRobotsTxt' => array(AttributeType::String, 'column' => ColumnType::Text), 'siteLinksSearchTargets' => array(AttributeType::Mixed), 'siteLinksQueryInput' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), /* -------------------------------------------------------------------------------- IDENTITY settings -------------------------------------------------------------------------------- */ 'googleSiteVerification' => array(AttributeType::String, 'maxLength' => 100, 'default' => ''), 'bingSiteVerification' => array(AttributeType::String, 'maxLength' => 100, 'default' => ''), 'googleAnalyticsUID' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'googleTagManagerID' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'googleAnalyticsSendPageview' => array(AttributeType::Bool, 'default' => true), 'googleAnalyticsAdvertising' => array(AttributeType::Bool, 'default' => false), 'googleAnalyticsEcommerce' => array(AttributeType::Bool, 'default' => false), 'googleAnalyticsEEcommerce' => array(AttributeType::Bool, 'default' => false), 'googleAnalyticsLinkAttribution' => array(AttributeType::Bool, 'default' => false), 'googleAnalyticsLinker' => array(AttributeType::Bool, 'default' => false), 'googleAnalyticsAnonymizeIp' => array(AttributeType::Bool, 'default' => false), 'siteOwnerType' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'siteOwnerSubType' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'siteOwnerSpecificType' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), /* -- Generic owner fields */ 'genericOwnerName' => array(AttributeType::String, 'default' => ''), 'genericOwnerAlternateName' => array(AttributeType::String, 'default' => ''), 'genericOwnerDescription' => array(AttributeType::String, 'maxLength' => 1024, 'default' => ''), 'genericOwnerUrl' => array(AttributeType::String, 'default' => ''), 'genericOwnerTelephone' => array(AttributeType::String, 'default' => ''), 'genericOwnerEmail' => array(AttributeType::String, 'default' => ''), 'genericOwnerStreetAddress' => array(AttributeType::String, 'default' => ''), 'genericOwnerAddressLocality' => array(AttributeType::String, 'default' => ''), 'genericOwnerAddressRegion' => array(AttributeType::String, 'default' => ''), 'genericOwnerPostalCode' => array(AttributeType::String, 'default' => ''), 'genericOwnerAddressCountry' => array(AttributeType::String, 'default' => ''), 'genericOwnerGeoLatitude' => array(AttributeType::String, 'default' => ''), 'genericOwnerGeoLongitude' => array(AttributeType::String, 'default' => ''), /* -- Generic organization owner fields http://schema.org/Organization */ 'organizationOwnerDuns' => array(AttributeType::String, 'default' => ''), 'organizationOwnerFounder' => array(AttributeType::String, 'default' => ''), 'organizationOwnerFoundingDate' => array(AttributeType::String, 'default' => ''), 'organizationOwnerFoundingLocation' => array(AttributeType::String, 'default' => ''), 'organizationOwnerContactPoints' => array(AttributeType::Mixed), /* -- LocalBusiness owner fields https://schema.org/LocalBusiness */ 'localBusinessPriceRange' => array(AttributeType::String, 'maxLength' => 10, 'default' => '$$$'), 'localBusinessOwnerOpeningHours' => array(AttributeType::Mixed), /* -- Corporation owner fields http://schema.org/Corporation */ 'corporationOwnerTickerSymbol' => array(AttributeType::String, 'default' => ''), /* -- Restaurant owner fields https://schema.org/Restaurant */ 'restaurantOwnerServesCuisine' => array(AttributeType::String, 'default' => ''), 'restaurantOwnerMenuUrl' => array(AttributeType::String, 'default' => ''), 'restaurantOwnerReservationsUrl' => array(AttributeType::String, 'default' => ''), /* -- Person owner fields https://schema.org/Person */ 'personOwnerGender' => array(AttributeType::String, 'default' => ''), 'personOwnerBirthPlace' => array(AttributeType::String, 'default' => ''), /* -- This is defined in definteRelations() below, of note: You don’t need to specify the foreign key column name in BELONGS_TO relations (defaults to the relation name appended with “Id”) https://craftcms.com/docs/plugins/records 'genericOwnerImage' => array(AttributeType::String, 'default' => 0), */ /* -------------------------------------------------------------------------------- SOCIAL settings -------------------------------------------------------------------------------- */ 'twitterHandle' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'facebookHandle' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'facebookProfileId' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'facebookAppId' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'linkedInHandle' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'googlePlusHandle' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'youtubeHandle' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'youtubeChannelHandle' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'instagramHandle' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'pinterestHandle' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'githubHandle' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'vimeoHandle' => array(AttributeType::String, 'maxLength' => 50, 'default' => ''), 'wikipediaUrl' => array(AttributeType::String, 'maxLength' => 100, 'default' => ''), /* -------------------------------------------------------------------------------- CREATOR settings -------------------------------------------------------------------------------- */ 'siteCreatorType' => array(AttributeType::String, 'default' => ''), 'siteCreatorSubType' => array(AttributeType::String, 'default' => ''), 'siteCreatorSpecificType' => array(AttributeType::String, 'default' => ''), /* -- Generic Creator fields */ 'genericCreatorName' => array(AttributeType::String, 'default' => ''), 'genericCreatorAlternateName' => array(AttributeType::String, 'default' => ''), 'genericCreatorDescription' => array(AttributeType::String, 'maxLength' => 1024, 'default' => ''), 'genericCreatorUrl' => array(AttributeType::String, 'default' => ''), 'genericCreatorTelephone' => array(AttributeType::String, 'default' => ''), 'genericCreatorEmail' => array(AttributeType::String, 'default' => ''), 'genericCreatorStreetAddress' => array(AttributeType::String, 'default' => ''), 'genericCreatorAddressLocality' => array(AttributeType::String, 'default' => ''), 'genericCreatorAddressRegion' => array(AttributeType::String, 'default' => ''), 'genericCreatorPostalCode' => array(AttributeType::String, 'default' => ''), 'genericCreatorAddressCountry' => array(AttributeType::String, 'default' => ''), 'genericCreatorGeoLatitude' => array(AttributeType::String, 'default' => ''), 'genericCreatorGeoLongitude' => array(AttributeType::String, 'default' => ''), /* -- Generic organization Creator fields http://schema.org/Organization */ 'organizationCreatorDuns' => array(AttributeType::String, 'default' => ''), 'organizationCreatorFounder' => array(AttributeType::String, 'default' => ''), 'organizationCreatorFoundingDate' => array(AttributeType::String, 'default' => ''), 'organizationCreatorFoundingLocation' => array(AttributeType::String, 'default' => ''), 'organizationCreatorContactPoints' => array(AttributeType::Mixed), /* -- LocalBusiness Creator fields https://schema.org/LocalBusiness */ 'localBusinessCreatorOpeningHours' => array(AttributeType::Mixed), /* -- Corporation Creator fields http://schema.org/Corporation */ 'corporationCreatorTickerSymbol' => array(AttributeType::String, 'default' => ''), /* -- Restaurant Creator fields https://schema.org/Restaurant */ 'restaurantCreatorServesCuisine' => array(AttributeType::String, 'default' => ''), 'restaurantCreatorMenuUrl' => array(AttributeType::String, 'default' => ''), 'restaurantCreatorReservationsUrl' => array(AttributeType::String, 'default' => ''), /* -- Person Creator fields https://schema.org/Person */ 'personCreatorGender' => array(AttributeType::String, 'default' => ''), 'personCreatorBirthPlace' => array(AttributeType::String, 'default' => ''), /* -- Humans.txt */ 'genericCreatorHumansTxt' => array(AttributeType::String, 'column' => ColumnType::Text), /* -- This is defined in definteRelations() below, of note: You don’t need to specify the foreign key column name in BELONGS_TO relations (defaults to the relation name appended with “Id”) https://craftcms.com/docs/plugins/records 'genericCreatorImage' => array(AttributeType::String, 'default' => 0), */ ); } /* -------------------------------------------------------------------------------- Get the default Humans.txt template -------------------------------------------------------------------------------- */ public function getDefaultHumans() { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Return the Humans.txt default template */ $templateName = '_humansDefault'; $loader = new TemplateLoader; $template = $loader->getSource($templateName); method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); return $template; } /* -- _getDefaultHumans */ /* -------------------------------------------------------------------------------- Get the default robots.txt template -------------------------------------------------------------------------------- */ public function getDefaultRobots() { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Return the robots.txt default template */ $templateName = '_robotsDefault'; $loader = new TemplateLoader; $template = $loader->getSource($templateName); method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); return $template; } /* -- _getDefaultRobots */ /* -------------------------------------------------------------------------------- Relationships -------------------------------------------------------------------------------- */ public function defineRelations() { return array( 'siteSeoImage' => array(static::BELONGS_TO, 'AssetFileRecord'), /* -- "Id" is automatically appended */ 'siteSeoTwitterImage' => array(static::BELONGS_TO, 'AssetFileRecord'), /* -- "Id" is automatically appended */ 'siteSeoFacebookImage' => array(static::BELONGS_TO, 'AssetFileRecord'), /* -- "Id" is automatically appended */ 'genericOwnerImage' => array(static::BELONGS_TO, 'AssetFileRecord'), /* -- "Id" is automatically appended */ 'genericCreatorImage' => array(static::BELONGS_TO, 'AssetFileRecord'), /* -- "Id" is automatically appended */ ); } } /* -- class Seomatic_SettingsRecord */ ================================================ FILE: releases.json ================================================ [ { "version": "1.1.56", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-11-10T11:00:00-11:00", "notes": [ "[Fixed] Fixed a regression that would cause field sources to not appear in the SEOmatic FieldType" ] }, { "version": "1.1.55", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-11-05T11:00:00-11:00", "notes": [ "[Improved] Added the ability to disable locales via the `config.php` file, for multi-site reasons", "[Improved] Added paranoid checking for deleted source fields in the FieldType", "[Fixed] Fixed an issue with the breadcrumbs potentially overlapping URLs improperly", "[Fixed] Truncate locales to 5 characters, to handle custom locales" ] }, { "version": "1.1.54", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-10-10T11:00:00-11:00", "notes": [ "[Improved] More intelligent handling of `addTrailingSlashesToUrls`" ] }, { "version": "1.1.53", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-10-06T11:00:00-11:00", "notes": [ "[Fixed] Fixed a regression with certain types of localized sites" ] }, { "version": "1.1.52", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-10-02T11:00:00-11:00", "notes": [ "[Fixed] Fixed breadcrumbs (and other URLs) for certain multi-locale setups", "[Fixed] Fixed an issue with `hreflang='x-default'` with non-localized sites" ] }, { "version": "1.1.51", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-09-21T11:00:00-11:00", "notes": [ "[Fixed] Handle localized elements for breadcrumbs", "[Added] Added support for `hreflang='x-default'`", "[Fixed] Fixed an issue where you could not change the Open Graph or Twitter `title` from a Twig template", "[Added] Added `availabilty` to the default `Offer` Product JSON-LD" ] }, { "version": "1.1.50", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-08-10T11:00:00-11:00", "notes": [ "[Added] Add the ability to override the canonicalUrl from an SEOmatic Meta FieldType", "[Improved] Updated the documentation" ] }, { "version": "1.1.49", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-08-02T11:00:00-11:00", "notes": [ "[Improved] Don't render `article:tag` if there are no keywords", "[Improved] Changed `referrer` from `always` to `no-referrer-when-downgrade`", "[Fixed] Fix issue when passing a string containing the `à` character to _cleanupText()", "[Fixed] Fixed an issue where meta vars were not sanitized with a custom template passed via `seomaticTemplatePath`", "[Fixed] Fixed a cosmetic bug where the SEOmatic FieldType settings didn't display the 'OpenGraph Image Source Changeable' properly", "[Fixed] Fixed an issue with template metas on Windows" ] }, { "version": "1.1.48", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-06-18T11:00:00-11:00", "notes": [ "[Fixed] Fixed an issue on old versions of PHP < PHP 5.4 with `http_response_code()`", "[Improved] Added a safer default `robots.txt` template" ] }, { "version": "1.1.47", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-06-08T11:00:00-11:00", "notes": [ "[Fixed] Fixed an issue with Live Preview and a previous or draft version of an entry", "[Fixed] Fixed a problem where the `dataLayer` wasn't passed down to the Google Tag Manager script", "[Improved] Commerce products now have the `name` set to the variant + title" ] }, { "version": "1.1.46", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-04-08T11:00:00-11:00", "notes": [ "[Improved] Force `publisher` to be a `Person` or `Organization` for news articles", "[Improved] Fixed the AdminCP documentation URL" ] }, { "version": "1.1.45", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-03-27T11:00:00-11:00", "notes": [ "[Fixed] Fixed an issue with `addTrailingSlashesToUrls` and certain PHP configurations" ] }, { "version": "1.1.44", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-03-22T11:00:00-11:00", "notes": [ "[Fixed] Fixed an issue with SEOmetrics and PHP 7.1 that would cause `Error parsing the DOM` errors", "[Fixed] Include our own copy of jQuery for SEOmetrics, rather than depending on the Craft version", "[Improved] The calls to `file_get_contents` for SEOmetrics are now much more permissive", "[Improved] If the current request is a 404, set the `canonicalUrl` to an empty string", "[Improved] If the `canonicalUrl` is set to an empty string, don't render the `<meta rel='canonical'` tag", "[Improved] Add a trailing / if `addTrailingSlashesToUrls` is set, but only if there's on extension", "[Improved] Fixed some deprecated meta information in `SeomaticPlugin.php`" ] }, { "version": "1.1.43", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-03-03T11:00:00-11:00", "notes": [ "[Added] Added Organization to Main Entity of Page", "[Added] Improved error logging on internally rendered template errors", "[Improved] Respect `addTrailingSlashesToUrls` when returning fully qualified URLs", "[Improved] Respect `addTrailingSlashesToUrls` in the URLs returned from `getLocalizedUrls()`", "[Improved] The default `robots.txt` template is now smarter about trailing slashes on the `siteUrl`", "[Improved] Dunn & Bradstreet -> Dun & Bradstreet in `DOCS.md`", "[Fixed] Return error messages from internally rendered templates as $htmlText", "[Fixed] Fix for extracting content from a Neo field" ] }, { "version": "1.1.42", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-02-12T11:00:00-11:00", "notes": [ "[Fixed] Fixed a regression that could cause FieldTypes to not save properly", "[Improved] Moved the lattitude/longitude info down below the address information for on the Site Identity & Site Creator settings", "[Improved] Wrapped all `templates->render()` calls in try/catch blocks to more gracefully handle errors", "[Added] Added an `Anonymize IP` toggle for Google Analytics, for compliance with some local laws", "[Added] Added Wikipedia to the Social Media settings & `sameAs` entity information" ] }, { "version": "1.1.41", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2017-02-10T11:00:00-11:00", "notes": [ "[Improved] Broke the changelog out to CHANGELOG.md", "[Fixed] Fixed a bug when saving meta fails", "[Fixed] Fixed an issue with the Charge plugin if you used the Charge element path", "[Fixed] Fixed an issue where re-saving a Section might not re-save the SEOmatic FieldType info", "[Improved] Updated the README.md" ] }, { "version": "1.1.40", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-12-20T11:00:00-11:00", "notes": [ "[Added] Added support for DigitalProducts and other base purchaseables", "[Fixed] Fixed Commerce deprecation warnings", "[Improved] The FieldType now works with all unknown elementtypes", "[Improved] Works with Eager Loaded elements", "[Improved] Improved the checking on the image fields in case there isn’t anything in there", "[Improved] Always sanitize the array values", "[Improved] Made the default `config.php` multi-environment", "[Improved] Updated the README.md" ] }, { "version": "1.1.39", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-09-23T11:00:00-11:00", "notes": [ "[Improved] Don't redirect to the welcome page if we're being installed via Console command", "[Improved] Updated the README.md" ] }, { "version": "1.1.38", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-09-22T11:00:00-11:00", "notes": [ "[Fixed] Fixed an issue with Entry meta and Template Meta would not default Twitter and Facebook images properly", "[Fixed] Fixed an issue where Facebook and Twitter image transforms were not properly applied with Entry and Template meta", "[Fixed] Fixed an issue where elements with certain characters in them could cause invalid Breadcrumb JSON-LD to be generated", "[Improved] The Javascript for the SEOmetrics `Analyze` button now returns false to eliminate the #", "[Improved] Updated the README.md" ] }, { "version": "1.1.37", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-09-18T11:00:00-11:00", "notes": [ "[Fixed] The Settings template now works with Craft < 2.5", "[Fixed] Fixed a regression that would cause php errors on the settings pages on PHP < 5.5", "[Improved] Updated the README.md" ] }, { "version": "1.1.36", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-09-07T11:00:00-11:00", "notes": [ "[Fixed] SEOmetrics will now work if `open_basedir` is set", "[Improved] Added html_entity_decode() to the _cleanupText() method", "[Fixed] Fixed an `Integrity constraint violation` MySQL error on certain MySQL versions", "[Improved] Updated the README.md" ] }, { "version": "1.1.35", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-09-06T11:00:00-11:00", "notes": [ "[Fixed] Fixed a regression that would cause Twitter and Facebook images to not show up", "[Improved] Updated the README.md" ] }, { "version": "1.1.34", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-09-05T11:00:00-11:00", "notes": [ "[Added] Added the ability to set separate images for Twitter Cards and Facebook OpenGraph images", "[Improved] Do more sanity checking when building the breadcrumbs, so it works if you have not element with the URI `__home__`", "[Improved] We don't swap in the element->title for mainEntityOfPage anymore", "[Added] Added a variable for craft.seomatic.getTemplateMeta()", "[Improved] Protocol-relative URLs are now allowed in the Schema", "[Added] Added `PageWeight` as a metric in SEOmetrics", "[Added] Added the headings to the SEOmetrics display to improve its readability", "[Improved] SEOmetrics now does a better job displaying Top Keywords on pages with very little text", "[Improved] Updated the README.md" ] }, { "version": "1.1.32", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-08-25T11:00:00-11:00", "notes": [ "[Improved] The SEOmetrics tab in the AdminCP now doesn't start analyzing until you click Analyze", "[Improved] Improved SEOmetric's sitemap.xml detection", "[Improved] Updated DOCS.md to reflect the change from `seomaticProduct` to `seomaticMainEntityOfPage`", "[Improved] Products now have commas stripped from their price, and use a `.` as a decimal point", "[Fixed] Fixed an issue that caused SEOmatic to throw an error in a tokenized entry draft", "[Fixed] Fixed an issue with stale SEOmatic FieldTypes that were added to a section, but then later removed", "[Improved] Updated the README.md" ] }, { "version": "1.1.31", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-08-15T11:00:00-11:00", "notes": [ "[Added] SEOmetrics now has its own tab, and can evaluate any arbitrary URL you paste into it", "[Added] SEOmatic can now pull images from FocusPoint FieldTypes", "[Added] Added 'Person' as a type for the Main Entity of Page", "[Added] Added Vimeo Handle to Social Media settings", "[Added] Added a 'globalMetaOverride' setting to config.php", "[Added] SEOmetrics checks for HTML validity via the WC3 Validator", "[Added] Added a Score % summary for each SEOmetrics category", "[Added] SEOmetrics now includes Google Pagespeed Insights scores and Google Mobile Usability scores", "[Added] SEOmetrics checks for SSL encryption via https", "[Improved] Better extraction of 'top keywords on page' in SEOmetrics", "[Improved] SEOmetrics now looks for link rel='publisher'", "[Improved] Refined SEOmetrics a bit, and added more 'Learn More' links", "[Fixed] The mainEntityOfPage is no longer improperly cached if being called by getJsonLd()", "[Improved] Updated the README.md" ] }, { "version": "1.1.30", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-08-05T11:00:00-11:00", "notes": [ "[Added] Added 'Learn More' link for JSON-LD structured data in SEOmetrics", "[Added] Breadcrumbs get added to WebPage objects, too", "[Improved] SEOmatic now remembers the selected locale in its tabbed settings", "[Improved] Fixed a regression in SEOmetric's keyword in URL checking", "[Improved] Increased HTML SimpleDom's MAX_FILE_SIZE to allow for parsing larger pages (especially with devMode on)", "[Improved] SEOmetrics handles missing robots.txt files more elegantly", "[Improved] SEOmetrics no longer depends on there being an meta description tag", "[Fixed] Fixed an error when using the Share arrow on a draft from Live Preview", "[Fixed] Fixed an issue accessing getJsonLd from an entry that has no URLs or has empty SEOmatic values", "[Fixed] mainEntityOfPage now works for Template Metas", "[Improved] Updated the README.md" ] }, { "version": "1.1.29", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-07-31T11:00:00-11:00", "notes": [ "[Added] Added the ability to extract seoTitle, seoDescription, and seoKeywords from Neo fields", "[Added] Added the ability to extract seoTitle, seoDescription, and seoKeywords from Preparse fields", "[Added] Added detection of Twitter Card meta tags, OpenGraph meta tags, and JSON-LD structured data in SEOmetrics", "[Added] Added detection robots.txt and sitemaps in SEOmetrics", "[Improved] Breadcrumbs are now generated for every element that matches a URI in the current URL segments", "[Improved] seoTitles, seoDescriptions, and seoKeywords are now truncated on save in SEOmatic Meta FieldTypes when they pull from other fields", "[Improved] Improved the SEOmetrics preview CSS a bit", "[Improved] Updated the README.md" ] }, { "version": "1.1.28", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-07-27T11:00:00-11:00", "notes": [ "[Added] Added modified_time and published_time to OpenGraph articles when an SEOmatic Meta FieldType is used", "[Improved] Safeguard against 'Undefined index: seoImageTransform'", "[Fixed] Handle non-posted entries", "[Fixed] Fixed an issue with getJsonLD($element)", "[Improved] Updated the README.md" ] }, { "version": "1.1.27", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-07-26T11:00:00-11:00", "notes": [ "[Fixed] Fixed a regression with Entry Meta cascade", "[Fixed] Fixed an issue with SEOmatic FieldTypes on categories", "[Fixed] Fixed invalid releases.json", "[Improved] We now strip all control characters from the JSON-LD arrays", "[Improved] Updated the README.md" ] }, { "version": "1.1.26", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-07-25T11:00:00-11:00", "notes": [ "[Added] Added Main Entity of Page JSON-LD microdata", "[Added] Added the method getJsonLD($element) to the FieldType model, so you can get the Main Entity of Page JSON-LD for an arbitrary entry (maybe in a craft.entries loop, for instance)", "[Improved] The 'logo' and 'image' in Creator and Identity JSON-LD is now an ImageObject", "[Improved] Added a space after each keyword in SEOmetrics to prevent horizontal scrolling due to frame overflow", "[Fixed] Fixed the locale of the transform fields in the FieldType", "[Fixed] Fix for empty SEO Titles for breadcrumbs", "[Improved] Updated the DOCS.md and wiki docs", "[Improved] Updated the README.md" ] }, { "version": "1.1.25", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-07-19T11:00:00-11:00", "notes": [ "[Fixed] Fixed an issue with SEO images not rendering properly via the FieldType", "[Fixed] Fixed a typo that would cause Template Metas to not save properly", "[Improved] Added a fallback if `iconv` is not installed for UTF-8 conversion", "[Improved] Explicitly state that the SEO Image must be in JPG, PNG, or GIF format", "[Improved] Updated the README.md" ] }, { "version": "1.1.24", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-07-18T11:00:00-11:00", "notes": [ "[Added] You can now specify image transforms for your SEO Image, Twitter Image, and Facebook Image for Site Meta, Template Meta, and Entry Metas", "[Added] Added og:image:type, og:image:width, and og:image:height to the OpenGraph meta", "[Added] Added support for Breadcrumbs JSON-LD microdata", "[Improved] the Twig array keys are now quoted in the display preview", "[Improved] Trimmed the fat on some of the settings storage maxLength's", "[Added] Added the ability to control the name of the GTM dataLayer variable", "[Fixed] Added renderGoogleTagManagerScript in config.php", "[Improved] The GTM script tags are now rendered when `devMode` is on, for debugging GTM", "[Improved] Updated the README.md" ] }, { "version": "1.1.23", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-07-08T11:00:00-11:00", "notes": [ "[Added] Added support for Google Tag Manager (including `dataLayer`)", "[Fixed] Keywords in the SEOmatic Meta FieldType are now tokenized again", "[Fixed] Fixed Javascript error in the FieldType Source popup menu", "[Fixed] Fix Undefined index in getLocalizedUrls", "[Improved] Change seoKeywords -> seoKeywordsUnparsed", "[Added] Add accessors for seoTitleUnparsed, seoDescriptionUnparsed, and seoKeywordsUnparsed", "[Improved] meta keywords and meta description tags only render if they are non-empty", "[Improved] Updated the README.md" ] }, { "version": "1.1.22", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-06-27T11:00:00-11:00", "notes": [ "[Fixed] Fixed the variable accessor rountines getSocial() and getIdentity()", "[Fixed] Fixed an issue with the 'custom' data not displaying in SEOmatic Meta FieldTypes", "[Improved] Updated the README.md" ] }, { "version": "1.1.21", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-06-25T11:00:00-11:00", "notes": [ "[Improved] Contents of SEOmatic Meta FieldTypes are now parsed when they are saved, rather than at runtime, which should be faster, and also makes the contents of the fields always accessible. Please re-save your Sections that use SEOmatic FieldTypes as per: https://github.com/nystudio107/seomatic/wiki/05.-SEO-Entry-Meta", "[Added] The SEO Title, SEO Description, and SEO Keywords fields in Template Metas can now include tags that output entry properties, such as `{title}` or `{myCustomField}` in them", "[Added] Added a getLocalizedUrls Twig filter/function that returns an array of localized URLs for the current request", "[Improved] The SEOmetrics window will now remember its open/closed state while in Live Preview", "[Improved] Some minor tweaks to the SEOmetrics CSS", "[Improved] The current locale is now included in the hreflang for localized sites", "[Improved] The language and country code are now both included in the hreflang for localized sites", "[Improved] The full URL to the current page is now used in the hreflang for localized sites", "[Improved] style and script tags are now stripped out before doing any SEOmetrics on the page", "[Added] Added approximate reading time in the Textual Analysis section of the SEOmetrics", "[Added] You can now control the string prepended to the title tag when devMode is on via config.php", "[Added] Added a French localization for SEOmatic, thanks to @FrancisBou", "[Fixed] We should not properly catch exceptions when there are errors in the variables in the SEOmatic FieldType fields", "[Fixed] Fixed a bug where SEOmetrics might not appear on certain setups that use https", "[Fixed] Fixed Twitter cards, changed `property` to `name`", "[Improved] Updated the README.md" ] }, { "version": "1.1.20", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-06-06T11:00:00-11:00", "notes": [ "[Added] Added 'Focus Keywords' to the SEOmetrics window, letting you analyze your page content for specific SEO keywords", "[Fixed] Fixed an issue with environmentalVariables in the Site Identity/Entity URL field", "[Improved] Forced CSS style reset on the SEOmetrics skeleton styles", "[Improved] Include port numbers with getFullyQualifiedUrl()", "[Improved] More accurate text to HTML % calculations", "[Improved] Changed the CSS z-index of the SEOmetrics windows to be 9998/9", "[Improved] Updated the README.md" ] }, { "version": "1.1.19", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-05-30T11:00:00-11:00", "notes": [ "[Fixed] Fixed an issue where the SEOmetrics wouldn't render on certain server setups", "[Added] Added a list of the top keywords on the page to the SEOmetrics", "[Improved] Updated the README.md" ] }, { "version": "1.1.18", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-05-30T11:00:00-05:00", "notes": [ "[Added] Added 'SEOmetrics' displayed during Live Preview that analyizes your page, and generates helpful tips for improving SEO", "[Fixed] SEOmatic will now populate its FieldType with default values on saveElement(), which is triggered via import plugings and also via Settings → Edit My Section → hit Save", "[Fixed] Added 'logo' and 'image' to the list of keys that should be always run through getFullyQualifiedUrl()", "[Fixed] Fixed a CSS issue with the AdminCP UI and very large screens", "[Improved] Updated the README.md" ] }, { "version": "1.1.17", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-05-09T11:00:00-05:00", "notes": [ "[Added] Added support for Google Sitelinks Search Box", "[Added] Added support for Bing site verification", "[Fixed] Fixed a visual display issue with the SEOmatic FieldType Source labels", "[Fixed] Facebook Article tags now use the proper data for author: and publisher:", "[Improved] Updated the README.md" ] }, { "version": "1.1.16", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-04-29T11:00:00-05:00", "notes": [ "[Added] Added craft()->seomatic->headlessRenderSiteMeta() for headless Craft CMS installs", "[Fixed] Fixed an issue where Twitter and Facebook properties were double-encoded", "[Fixed] Fixed a visual display issue with tabs and Craft 2.4.x", "[Fixed] Fixed a localization issue with extractTextFromMatrix()", "[Improved] SEOmatic now converts any objects passed into ths seomatic variables to string automatically", "[Improved] Updated the README.md" ] }, { "version": "1.1.15", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-04-25T11:00:00-05:00", "notes": [ "[Added] Added a `siteUrlOverride` config setting for when you need to override the `siteUrl`, for instance in a headless ElementAPI server", "[Added] Added breadcrumbs to the AdminCP UI", "[Added] Added the ability to change the display name of the SEOmatic plugin in the AdminCP", "[Improved] Fixed an issue with empty organizationOwnerContactPoints", "[Improved] The array passed into renderJSONLD() is now sanitized before it is rendered", "[Improved] craft.locale is now properly limited to an ISO 639-1 language code in the metadata", "[Improved] Facebook locales now ensure that they have a territory as well as a language, e.g.: fr_FR, not just fr", "[Improved] Updated the README.md" ] }, { "version": "1.1.14", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-04-19T11:00:00-05:00", "notes": [ "[Added] Added [Organization Contact Points](https://developers.google.com/structured-data/customize/contact-points) that can appear in the Google Knowledge panel in some searches", "[Added] You can control whether Product JSON-LD is rendered via the `renderCommerceProductJSONLD` config variable", "[Added] Added support for arrays as the root JSON-LD type in the JSON-LD generator", "[Improved] SEOmatic now outputs JSON-LD microdata for all of the Craft Commerce Product Variants (previously it was outputting only the default Variant)", "[Improved] Updated the README.md" ] }, { "version": "1.1.13", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-04-16T11:00:00-05:00", "notes": [ "[Added] If an SEOmatic FieldType is attached to a Craft Commerce Product, in addition to rendering the page SEO Meta, it will also generate [Product JSON-LD microdata](https://developers.google.com/structured-data/rich-snippets/products) that describes the product.", "[Improved] SEOmatic now uses control panel sub-navs if you're running Craft 2.5 or later", "[Improved] Updated the README.md" ] }, { "version": "1.1.12", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-04-14T11:00:00-05:00", "notes": [ "[Improved] SEOmatic will now populate its FieldType with default values on saveElement(), which is triggered via import plugings and also via Settings → Edit My Section → hit Save", "[Improved] Updated the README.md" ] }, { "version": "1.1.11", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-04-08T11:00:00-05:00", "notes": [ "[Fixed] Fixed an issue with rendering the humans.tx and robots.txt templates", "[Improved] An HTML comment is added if the Google Analytics script is not included due to LivePreview or devMode being on", "[Improved] Updated the README.md" ] }, { "version": "1.1.10", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-03-29T11:00:00-05:00", "notes": [ "[Fixed] Fixed API 'deprecation' errors with Craft 2.6.2778 or later", "[Improved] Added more controls for the default title, description, and keywords values in config.php", "[Improved] Updated the README.md" ] }, { "version": "1.1.9", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-03-17T11:00:00-05:00", "notes": [ "[Fixed] Fixed a typo in the Preview SEO Tags window", "[Fixed] We now handle Twig errors in SEOmatic FieldType fields gracefully", "[Improved] Query strings are now stripped from the canonical URL", "[Improved] All things that should be fully qualified URLs are now fully qualified URLs, even if you specify them via path or relative URL", "[Improved] Updated the README.md" ] }, { "version": "1.1.8", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-03-10T11:00:00-05:00", "notes": [ "[Improved] In the SEOmatic FieldType, moved default setting to prepValue() so it'll work if the entries are all re-saved via resaveAllElements", "[Added] Added getFullyQualifiedUrl() helper as a Twig function/filter and as a variable for Twig templating", "[Improved] Turn things that should be fully qualified URLs into fully qualified URLs, such as the canonicalUrl, seoImage, and anything with url as a key", "[Improved] Added seoImage() and seoImageID() to the model so you can get at those values from, say, entry.seoField.seoImage()", "[Fixed] canonicalUrl fixes for multilingual sites", "[Fixed] Fixed errant ordinal encoding of the first element in a sequential array", "[Improved] Updated the README.md" ] }, { "version": "1.1.7", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-03-04T11:00:00-05:00", "notes": [ "[Fixed] Fixed a regression that would cause the Place JSON-LD to render incorrectly", "[Fixed] Fixed a nasty bug that would cause SEOmatic to crash if you used {title} or other variables in your SEOmatic Entry Meta fields", "[Improved] Updated the README.md" ] }, { "version": "1.1.6", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-03-03T11:00:00-05:00", "notes": [ "[Fixed] Fixed a fun recursion bug that would cause meta arrays nested more than 1 deep to not be sanitized & parsed properly", "[Added] Added Composer support for type: craft-plugin in composer.json", "[Fixed] Removed the ?> from the config.php as per Lindsey's best practices", "[Fixed] The meta variables rendered by craft.seomatic.renderIdentity(), craft.seomatic.renderWebsite() and craft.seomatic.renderPlace() are now taken from the Twig context, so they can be modified before output", "[Fixed] The metas will now be cached as intended (oops), which should increase performance a bit", "[Improved] Updated the README.md" ] }, { "version": "1.1.5", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-02-27T11:00:00-05:00", "notes": [ "[Added] Added support for OpenGraph article types", "[Added] Added support for OpenGraph fb:app_id on the Social Media settings", "[Fixed] The canonicalUrl should be set properly to a fully qualified URL now", "[Fixed] The Site Creator will now remember the LocalBusiness and Corporation settings", "[Fixed] The SEOmatic FieldType will preview the canonicalUrl properly now", "[Improved] Updated the README.md" ] }, { "version": "1.1.4", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-02-19T11:00:00-05:00", "notes": [ "[Added] Set the default Twig escaping strategy for robots.txt and humans.txt to false (so the tag output is not escaped)", "[Fixed] Handle the case where there is no Twitter field", "[Fixed] Handle empty OpeningHours spec correctly, and other OpeningHours fixes", "[Fixed] actionRenderRobots is now publicly accessible (doh!), allowing robots.txt to render properly when not logged in", "[Fixed] Fixed a template error on the SEO Site Meta tab on localized sites", "[Improved] Updated the Roadmap section with pending bugs/features", "[Improved] Removed the siteRobotsTxt from the globals display", "[Improved] Updated the README.md" ] }, { "version": "1.1.3", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-02-17T11:00:00-05:00", "notes": [ "[Fixed] Fixed some typos in SEOmatic & the docs re: robots.txt", "[Fixed] The Google Analytics script no longer renders if the Google Analytics Tracking ID field is empty", "[Fixed] Fixed an issue with console errors on the backend with the SEOmatic FieldType", "[Fixed] OpeningHours now only displays for LocalBusiness", "[Added] SEOmatic now processes adding the SEO Site Name to the og and twitter titles just before rendering, so you can do things like change the seomaticSiteMeta.siteSeoTitlePlacement via Twig, and it'll do the right thing", "[Fixed] Fixed a PHP error if the Site Creator is a Person", "[Improved] Updated the README.md" ] }, { "version": "1.1.1", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-02-09T11:00:00-05:00", "notes": [ "[Added] SEOmatic Meta FieldTypes now work to automatically set meta when attached to Categories and also Craft Commerce Products", "[Improved] The Google Analytics script tag is not included during Live Preview anymore", "[Added] [Added] Added the ability to reference the fields of an SEOmatic FieldType via entry.mySeomaticField.seoTitle & entry.mySeomaticField.seoDescription & entry.mySeomaticField.seoKeywords", "[Added] There is now significantly more space available for the Entity Description and Creator Description", "[Fixed] Fixed an issue with PHP 5.3", "[Added] SEOmatic now handles robots.txt; it's configured on the SEO Site Meta tab", "[Improved] Updated the README.md" ] }, { "version": "1.1.0", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-02-07T11:00:00-05:00", "notes": [ "[Added] Added all of the schema.org Organization types to Identity settings", "[Added] SEOmatic Meta FieldTypes now have settings that let you restrict the Asset Sources available to them", "[Added] SEOmatic Meta FieldTypes now let you set the default Source settings for each field", "[Added] SEOmatic Meta FieldTypes now let you choose if the Source can be changed when editing an entry", "[Added] You can include tags that output entry properties, such as {title} or {myCustomField} in SEOmatic FieldType fields.", "[Added] Twitter Card and Facebook types can now have null values in the FieldType, and Template meta settings", "[Added] We now include separate Place JSON-LD for Organizations (in addition to being part of the Identity)", "[Added] Added the Opening Hours fields for LocalBusiness, and include the openingHoursSpecification in the Site Identity and Place JSON-LD", "[Added] Added support for Google Analytics on the Site Identity tab", "[Added] Added the ability to control whether a PageView is automatically sent by Google Analytics", "[Added] Added support for enabling Google Analytics plugins on an a la carte basis", "[Fixed] We now handle numeric Google+ accounts properly", "[Fixed] The Preview buttons display properly on mobile devices for the SEOmatic FieldType now", "[Improved] Added links to WooRank.com for the SEO Title, SEO Description, and SEO Keywords tags that explain best practices for them", "[Added] Added a config.php file where you can override some of SEOmatic's default behaviors", "[Added] Added menu and acceptsReservations fields for FoodEstablishments", "[Improved] Converted all of the .html template files over to .twig", "[Added] Expanded the JSON-LD parser to support ordinal arrays of associative arrays", "[Fixed] Fixed an issue with the cannonical URL and some localized sites", "[Improved] Updated the README.md" ] }, { "version": "1.0.12", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-01-19T11:00:00-05:00", "notes": [ "[Improved] Performance improvement by not checking to see if a template exists before matching it", "[Improved] Keyword tags are now saved onblur", "[Improved] The Preview buttons in the SEOmatic FieldType are laid out better now", "[Improved] Updated the README.md" ] }, { "version": "1.0.11", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-01-13T11:00:00-05:00", "notes": [ "[Added] Added a preview of the Source fields in SEOmatic FieldTypes", "[Added] You can now set Tags fields to be a Source for SEO FieldType Meta fields", "[Added] Added a meta referrer tag to the template (set to 'always')", "[Added] Added a http-equiv='Content-Type' content='text/html; charset=utf-8' meta tag", "[Fixed] If the SEO Title is empty, it no longer appear in the title", "[Fixed] Fixed an issue that would cause the seomatic* variables to not be properly sanitized", "[Improved] Updated the README.md" ] }, { "version": "1.0.10", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-01-12T11:00:00-05:00", "notes": [ "[Added] You can now set Matrix blocks to be a Source for SEO FieldType Meta fields; it iterates through all text and rich text fields", "[Added] Added a extractTextFromMatrix() Twig filter/function/variable for templating use", "[Improved] The truncateStringOnWord() function does a much better job on comma-delimited keywords now", "[Fixed] Fixed a regression that caused the 'New Template Meta' button to be broken", "[Improved] Updated the README.md" ] }, { "version": "1.0.9", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-01-11T11:00:00-05:00", "notes": [ "[Added] Added tokenized input fields for the keywords for the Site Meta, Template Meta, and Field Meta", "[Added] You can now specify the position of the SEO Site Title relative to the Title", "[Added] You can now specify the separator character that appears between the SEO Site Title and the Title", "[Fixed] Potentially fixed an issue with iconv when using the extractKeywords() or extractSummary() filters", "[Fixed] Fixed a regression that caused the Template Metas to stop working on the front-end", "[Improved] Updated the README.md" ] }, { "version": "1.0.8", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-01-09T11:00:00-05:00", "notes": [ "[Improved] The rendering of the Identity and WebSite JSON-LD is now done via a tag in the templates, giving flexibility to people who want to use custom templates", "[Added] If the site is in devMode, [devMode] is prepended to the <title>", "[Fixed] Fixed an issue with PHP < 5.4", "[Fixed] Fixed an issue if a plugin (like A&M forms) renders a template with Twig code in the template name", "[Improved] Updated the README.md" ] }, { "version": "1.0.7", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2016-01-01T11:00:00-05:00", "notes": [ "[Added] Added a 'robots' field globally to the SEO Meta for specifying noindex/nofollow", "[Fixed] Added error handling to the 'Look up Latitude/Longitude' buttons", "[Fixed] Some minor template / logic issues", "[Improved] Updated the README.md" ] }, { "version": "1.0.6", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2015-12-31T11:00:00-05:00", "notes": [ "[Added] Added an SEOmatic Meta field type that allows you to attach meta to Entries/Sections", "[Added] The SEOmatic Meta field type can have custom date, or pull from other fields in that Entry, or even extract keywords from other fields", "[Added] You can preview the settings from SEOmatic Meta field types that are attached to entries", "[Fixed] Fixed db error on install on Windows due to trying to set a default for 'genericCreatorHumansTxt'", "[Fixed] Facebook Open Graph tags weren't being generated if you had no Facebook Profile ID set, which could cause templating errors", "[Fixed] The seomatic.twitter.creator field wasn't set unless summary_large_image was chosen, which could cause templating errors", "[Fixed] The seomaticMeta variables were being overzealously encoded as htmlentities", "[Fixed] Fixed an issue where weird characters would appear in truncated strings on certain versions of PHP", "[Improved] All JSON-LD rendered through SEOmatic is now minified if you have the Minify plugin installed", "[Improved] Updated the README.md" ] }, { "version": "1.0.5", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2015-12-28T11:00:00-05:00", "notes": [ "[Added] Added 'renderJSONLD' Twig function & filter, and 'craft.seomatic.renderJSONLD()' variable for rendering arbitary JSON-LD schemas", "[Added] SEOmatic now uses 'renderJSONLD' internally to render the Identity and WebSite JSON-LD microdata, rather than templates", "[Added] The 'seomaticIdenity' and 'seomaticCreator' variables are now proper JSON-LD arrays that can be manipulated/added to via Twig", "[Added] Refactored a bunch of internal code to support the new Identity & WebSite formats", "[Added] Rolled all of the SEOmatic calculated variables into the 'seomaticHelper' array", "[Added] Added support for humans.txt authorship accreditation via a tag and template", "[Fixed] Fixed some sticky encoding issues with meta variables", "[Fixed] Cleaned up the code base so we're no longer passing objects around into the templates, just pure arrays, for efficiency's sake", "[Added] Support for Twitter Summary & Summary with Large Image cards", "[Added] The Twitter Card variables are now rendered into the semomaticMeta array, and thus can be independently manipulated", "[Added] The Facebook Open Graph variables are now rendered into the semomaticMeta array, and thus can be independently manipulated", "[Added] Database migrations to support the new features", "[Improved] Updated the README.md" ] }, { "version": "1.0.4", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2015-12-22T11:00:00-05:00", "notes": [ "[Added] Added 'copyrightNotice', 'addressString', 'addressHtml', & 'mapUrl' to 'seomaticIdentity'", "[Added] Added 'copyrightNotice', 'addressString', 'addressHtml', & 'mapUrl' to 'seomaticCreator'", "[Added] Added 'hasMap' to the 'location' schema", "[Added] Added a 'Look up Latitude/Longitude' button to the Site Identity & Site Creator settings", "[Fixed] Fixed an issue with the releases.json; the 'Update' button should show up going forward for the plugin", "[Improved] The length of the 'seoSiteName' is now taken into account when truncating the 'seoTitle'", "[Improved] Updated the README.md" ] }, { "version": "1.0.3", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2015-12-21T11:00:00-05:00", "notes": [ "[Fixed] Fixed an issue with the TextRank lib not being properly in the git repo, causing it to error when used", "[Fixed] The SEOmatic settings pages now have a SAVE button on them for Craft 2.4", "[Improved] Updated the README.md" ] }, { "version": "1.0.2", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2015-12-20T11:00:00-05:00", "notes": [ "[Added] Exposed a few more utility functions via Twig filters & functions", "[Added] The genericOwnerEmail & genericCreatorEmail variables are ordinal-encoded, to obfuscate them", "[Added] Added 'location': 'Place' type to the Identity & Creator schemas, including GeoCoordinates", "[Fixed] Fixed the localization so SEOmatic works if your Admin CP is in a language other than English", "[Improved] Updated the README.md" ] }, { "version": "1.0.1", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2015-12-19T11:00:00-05:00", "notes": [ "[Added] If the Minify plugin is installed, SEOmatic will minify the SEO Meta tags & JSON-LD", "[Improved] Improved the caching mechanism to span all of the meta", "[Fixed] Fixed a few of small errors", "[Improved] Updated the README.md to better document SEOmatic" ] }, { "version": "1.0.0", "downloadUrl": "https://github.com/nystudio107/seomatic/archive/master.zip", "date": "2015-12-18T11:00:00-05:00", "notes": [ "[Added] Initial release" ] } ] ================================================ FILE: resources/css/bootstrap-tokenfield.css ================================================ /*! * bootstrap-tokenfield * https://github.com/sliptree/bootstrap-tokenfield * Copyright 2013-2014 Sliptree and other contributors; Licensed MIT */ @-webkit-keyframes blink { 0% { border-color: #ededed; } 100% { border-color: #b94a48; } } @-moz-keyframes blink { 0% { border-color: #ededed; } 100% { border-color: #b94a48; } } @keyframes blink { 0% { border-color: #ededed; } 100% { border-color: #b94a48; } } .tokenfield { height: auto; min-height: 34px; padding-bottom: 0px; } .tokenfield.focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); } .tokenfield .token { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; display: inline-block; border: 1px solid #d9d9d9; background-color: #ededed; white-space: nowrap; margin: -1px 5px 5px 0; height: 22px; vertical-align: top; cursor: default; } .tokenfield .token:hover { border-color: #b9b9b9; } .tokenfield .token.active { border-color: #52a8ec; border-color: rgba(82, 168, 236, 0.8); } .tokenfield .token.duplicate { border-color: #ebccd1; -webkit-animation-name: blink; animation-name: blink; -webkit-animation-duration: 0.1s; animation-duration: 0.1s; -webkit-animation-direction: normal; animation-direction: normal; -webkit-animation-timing-function: ease; animation-timing-function: ease; -webkit-animation-iteration-count: infinite; animation-iteration-count: infinite; } .tokenfield .token.invalid { background: none; border: 1px solid transparent; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; border-bottom: 1px dotted #d9534f; } .tokenfield .token.invalid.active { background: #ededed; border: 1px solid #ededed; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .tokenfield .token .token-label { display: inline-block; overflow: hidden; text-overflow: ellipsis; padding-left: 4px; vertical-align: top; } .tokenfield .token .close { font-family: Arial; display: inline-block; line-height: 100%; font-size: 1.1em; line-height: 1.49em; margin-left: 5px; float: none; height: 100%; vertical-align: top; padding-right: 4px; } .tokenfield .token-input { background: none; width: 60px; min-width: 60px; border: 0; height: 20px; padding: 0; margin-bottom: 6px; -webkit-box-shadow: none; box-shadow: none; } .tokenfield .token-input:focus { border-color: transparent; outline: 0; /* IE6-9 */ -webkit-box-shadow: none; box-shadow: none; } .tokenfield.disabled { cursor: not-allowed; background-color: #eeeeee; } .tokenfield.disabled .token-input { cursor: not-allowed; } .tokenfield.disabled .token:hover { cursor: not-allowed; border-color: #d9d9d9; } .tokenfield.disabled .token:hover .close { cursor: not-allowed; opacity: 0.2; filter: alpha(opacity=20); } .has-warning .tokenfield.focus { border-color: #66512c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; } .has-error .tokenfield.focus { border-color: #843534; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; } .has-success .tokenfield.focus { border-color: #2b542c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; } .tokenfield.input-sm, .input-group-sm .tokenfield { min-height: 30px; padding-bottom: 0px; } .input-group-sm .token, .tokenfield.input-sm .token { height: 20px; margin-bottom: 4px; } .input-group-sm .token-input, .tokenfield.input-sm .token-input { height: 18px; margin-bottom: 5px; } .tokenfield.input-lg, .input-group-lg .tokenfield { height: auto; min-height: 45px; padding-bottom: 4px; } .input-group-lg .token, .tokenfield.input-lg .token { height: 25px; } .input-group-lg .token-label, .tokenfield.input-lg .token-label { line-height: 23px; } .input-group-lg .token .close, .tokenfield.input-lg .token .close { line-height: 1.3em; } .input-group-lg .token-input, .tokenfield.input-lg .token-input { height: 23px; line-height: 23px; margin-bottom: 6px; vertical-align: top; } .tokenfield.rtl { direction: rtl; text-align: right; } .tokenfield.rtl .token { margin: -1px 0 5px 5px; } .tokenfield.rtl .token .token-label { padding-left: 0px; padding-right: 4px; } ================================================ FILE: resources/css/css-reset.css ================================================ .token { display: inline; border: none; border-radius: 0; padding: 0; font-size: inherit; line-height: inherit; text-shadow: none; background: none; } ================================================ FILE: resources/css/field.css ================================================ div.seomatic-livepreviewbtn { background-color: #fafafa!important; background-image: -webkit-linear-gradient(white, #fafafa)!important; background-image: -moz-linear-gradient(white, #fafafa)!important; background-image: -ms-linear-gradient(white, #fafafa)!important; background-image: -o-linear-gradient(white, #fafafa)!important; background-image: linear-gradient(white, #fafafa)!important; width: 100%; } div.seomatic-livepreviewbtn:before { content: 'view'; margin-left: -2px; margin-right: -2px; font-family: 'Craft'; speak: none; -webkit-font-feature-settings: "liga", "dlig"; -moz-font-feature-settings: "liga=1, dlig=1"; -moz-font-feature-settings: "liga", "dlig"; -ms-font-feature-settings: "liga", "dlig"; -o-font-feature-settings: "liga", "dlig"; font-feature-settings: "liga", "dlig"; text-rendering: optimizeLegibility; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; direction: ltr; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; display: inline-block; text-align: center; font-style: normal; vertical-align: middle; word-wrap: normal !important; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; } div.preview-field-wrapper { display: inline-block; width: 45%; min-width: 240px; padding-left: 2.3%; padding-right: 2.3%; } div.seomatic-meta-field { border: 1px solid #e3e5e8; margin-bottom: 10px; padding: 7px 14px 14px; border-radius: 3px; background: #f9fafa; } div.seomatic-meta-field-title { background: #eef0f1; color: #8f98a3; margin: -7px -14px 14px; padding: 7px 14px 7px 14px; width: calc(100% + 28px); -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; border-radius: 2px 2px 0 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; word-wrap: normal; cursor: default; } div.customFieldWrapper { margin-top: 0; } img.scale-with-grid { margin-top: 8px; max-width: 100%; height: auto; border: 1px solid #e3e5e8; border-radius: 3px; } img.seomatic-field-icon { display: inline-block; width: 16px; height: auto; padding-right: 7px; } div.nomarginfield { margin: 0px; } p.textpreview { margin-top: 8px; color: #AAA; border: 1px solid #e3e5e8; border-radius: 3px; padding: 5px 7px; } div.source-field-container, div.source-container { width: 100%; margin-bottom: 7px; } div.source-field-item, div.source-item { display: inline-block; vertical-align: middle; } div.seomatic-field-preview-container { float: right; width: 300px; } .clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } * html .clearfix { zoom: 1; } /* IE6 */ *:first-child+html .clearfix { zoom: 1; } /* IE7 */ div.secondbtn { margin-bottom: 0px; } ================================================ FILE: resources/css/seo-metrics-style.css ================================================ body.seo-metrics { background-color: #FFF; } div.score-display { padding-top: 10px; padding-left: 30px; } span.goodscore { color: green; } span.badscore { color: red; } span.attentionscore { color: #FFA500; font-weight: bold; } div.seomatic-metrics-wrapper { padding: 10px; } .text-left { text-align: left; } .text-center { text-align: center; } div.seo-metrics-section { margin-bottom: 24px; } span.seo-metrics-keyword { color: #222; text-transform: uppercase; } ================================================ FILE: resources/css/style.css ================================================ div.seomatic-devmode-wrapper { width: 100%; margin-bottom: 10px; background-color: #333f4d; } div.seomatic-devmode { width: 100%; height: 4px; background: url('/admin/resources/images/dev-mode.svg') repeat-x 15px 0; cursor: help; } .geolookup-errors-wrapper { display: none; } p.seomatic-devmode-text { margin: 0; padding: 10px; color: white; } .smallfield { width: 30px; text-align: center; } div.tokenfield { border: 1px solid #e3e5e8; border-radius: 3px; padding: 5px 7px; box-sizing: border-box; } div.lightswitch-list-container { padding-top: 3px; padding-bottom: 3px; } div.inline-item-padding { padding-left: 10px; } div.inline-item { display: inline-block; vertical-align: middle; margin: 0; } .inline-item > div, .inline-item > div > label { display: inline-block; vertical-align: middle; margin: 0; } div.half-width-field { display: inline-block; width: 45%; } div.half-width-field-left { padding-right: 5%; } p.instructions { margin-top: 4px; font-size: 11px; line-height: 1.4; color: #8f98a3; } .codeStyle { font-family: Menlo, monospace; } div.preview-modal { width: 90vw; height: 90vh; background-color: #FFFFFF; border-radius: 4px; overflow-x: hidden; overflow-y: scroll; margin-top: 2%; } div.preview-modal-inner { padding: 5%; } div.preview-column { float: none; width: 100%%; } div.seomatic-container { overflow: hidden; } div.metaPane { display: none; } div.secondbtn { margin: 14px 0px; } div.displaypreview-container { } div.displaypreview { width: 512px; overflow: hidden; border: 1px solid #EEE; padding: 30px; } h3.googleDisplay { display: block; overflow: hidden; text-overflow: ellipsis; -webkit-text-overflow: ellipsis; white-space: nowrap; font-size: 18px; font-family: arial, sans-serif; font-weight: normal; line-height: 21px; list-style-type: decimal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; } a.googleDisplay { text-decoration: none; } a.googleDisplay:link { cursor: pointer; color: #1a0dab; } a.googleDisplay:visited { color: #609; } a.googleDisplay:hover { text-decoration: underline; } div.googleDisplay1 { color: rgb(84, 84, 84); display: block; font-family: arial, sans-serif; font-size: 13px; font-weight: normal; line-height: 18px; list-style-type: decimal; max-width: 546px; text-align: left; visibility: visible; } div.googleDisplay2 { color: rgb(128, 128, 128); display: block; font-family: arial, sans-serif; font-size: 13px; font-weight: normal; line-height: 16px; list-style-type: decimal; text-align: left; visibility: visible; white-space: nowrap; } cite.googleDisplay { color: rgb(0, 102, 33); display: inline; font-family: arial, sans-serif; font-size: 14px; font-style: normal; font-weight: normal; height: auto; line-height: 16px; list-style-type: decimal; text-align: left; visibility: visible; white-space: nowrap; width: auto; } div.googleDisplay3 { -webkit-user-select: none; color: rgb(128, 128, 128); display: inline; font-family: arial, sans-serif; font-size: 13px; font-weight: normal; height: auto; line-height: 16px; list-style-type: decimal; margin-bottom: 0px; margin-left: 3px; margin-right: 3px; margin-top: 0px; position: relative; text-align: left; vertical-align: middle; visibility: visible; white-space: nowrap; width: auto; } span.googleDisplay1 { -webkit-user-select: none; border-bottom-color: rgb(0, 102, 33); border-bottom-style: solid; border-bottom-width: 0px; border-left-color: rgba(0, 0, 0, 0); border-left-style: solid; border-left-width: 4px; border-right-color: rgba(0, 0, 0, 0); border-right-style: solid; border-right-width: 4px; border-top-color: rgb(0, 102, 33); border-top-style: solid; border-top-width: 5px; color: rgb(128, 128, 128); display: block; font-family: arial, sans-serif; font-size: 13px; font-weight: normal; left: 0px; line-height: 16px; list-style-type: decimal; margin-left: 3px; margin-top: -4px; position: absolute; text-align: left; text-decoration: none; top: 50%; visibility: visible; white-space: nowrap; width: 0px; } div.googleDisplay2 { color: rgb(84, 84, 84); display: block; font-family: arial, sans-serif; font-size: 13px; font-weight: normal; height: auto; line-height: 18px; list-style-type: decimal; text-align: left; visibility: visible; width: auto; word-wrap: break-word; } .TwitterCardsGrid { -webkit-background-clip: border-box; -webkit-background-origin: padding-box; -webkit-background-size: auto; background-attachment: scroll; background-clip: border-box; background-color: rgba(0, 0, 0, 0); background-image: none; background-origin: padding-box; background-size: auto; color: rgb(0, 0, 0); display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; height: 129.9375px; line-height: 18.200000762939453px; overflow-x: hidden; overflow-y: hidden; position: relative; text-align: left; } .TwitterCardsGrid-Large { height: 357px; } .TwitterCardGrid-col { clear: both; color: rgb(0, 0, 0); display: block; float: left; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; height: 125.421875px; line-height: 18.200000762939453px; margin-bottom: 4.526619911193848px; text-align: left; width: 506px; } .TwitterCardGrid-col-Large { height: 357px; } a.TwitterCard-container { -webkit-transition-delay: 0s, 0s; -webkit-transition-duration: 0.15s, 0.15s; -webkit-transition-property: background-color, border-color; -webkit-transition-timing-function: ease-in-out, ease-in-out; border-bottom-color: rgb(225, 232, 237); border-bottom-left-radius: 5.984375px; border-bottom-right-radius: 5.984375px; border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(225, 232, 237); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(225, 232, 237); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(225, 232, 237); border-top-left-radius: 5.984375px; border-top-right-radius: 5.984375px; border-top-style: solid; border-top-width: 1px; box-sizing: border-box; clear: both; color: rgb(0, 0, 0); cursor: pointer; display: block; float: left; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; height: 125.421875px; line-height: 18.200000762939453px; outline-offset: 0px; overflow-x: hidden; overflow-y: hidden; text-align: left; text-decoration: none; transition-delay: 0s, 0s; transition-duration: 0.15s, 0.15s; transition-property: background-color, border-color; transition-timing-function: ease-in-out, ease-in-out; width: 506px; } a.TwitterCard-container-Large { height: 357px; } a.TwitterCard-container:hover { outline: 0; background: #F5F8FA; border-color: rgba(136, 153, 166, .5) } .TwitterCard-summary-image { background-color: rgb(225, 232, 237); border-bottom-color: rgb(225, 232, 237); border-bottom-style: solid; border-bottom-width: 0px; border-left-color: rgb(225, 232, 237); border-left-style: solid; border-left-width: 0px; border-right-color: rgb(225, 232, 237); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(225, 232, 237); border-top-style: solid; border-top-width: 0px; color: rgb(0, 0, 0); cursor: pointer; display: block; float: left; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; height: 123.421875px; line-height: 18.200000762939453px; text-align: left; text-decoration: none; width: 123.421875px; } .TwitterCard-summary-image-Large { width: 506px; height: 254px; } .TwitterCard-image-container { color: rgb(0, 0, 0); cursor: pointer; display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; height: 123.421875px; line-height: 18.200000762939453px; overflow-x: hidden; overflow-y: hidden; position: relative; text-align: left; text-decoration: none; width: 123.421875px; } .TwitterCard-image-container-Large { width: 506px; height: 254px; } .TwitterCard-image-wrapper { -webkit-background-size: cover; background-image: none; background-position: 50% 50%; background-repeat: no-repeat; background-size: cover; bottom: -1px; color: rgb(0, 0, 0); cursor: pointer; display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; height: 125.421875px; left: -1px; line-height: 18.200000762939453px; position: absolute; right: -1px; text-align: left; text-decoration: none; top: -1px; width: 125.421875px; } .TwitterCard-image-wrapper-Large { width: 506px; height: 254px; } .TwitterCard-summary-content-container { color: rgb(0, 0, 0); cursor: pointer; display: block; float: left; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; height: 120.03125px; line-height: 18.200000762939453px; text-align: left; text-decoration: none; width: 379.5625px; } .TwitterCard-summary-content-container-Large { width: 504px; height: 102px; } .TwitterCard-summary-content { box-sizing: border-box; color: rgb(0, 0, 0); cursor: pointer; display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; height: 120.03125px; line-height: 18.200000762939453px; padding-bottom: 10.5px; padding-left: 10.5px; padding-right: 10.5px; padding-top: 10.5px; text-align: left; text-decoration: none; width: 379.5625px; } .TwitterCard-summary-content-Large { width: 504px; height: 102px; } h2.TwitterCard-title { color: rgb(0, 0, 0); cursor: pointer; display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; font-weight: bold; height: 18px; line-height: 18.200000762939453px; margin-bottom: 2.0999999046325684px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: 18.200000762939453px; overflow-x: hidden; overflow-y: hidden; text-align: left; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; } p.TwitterCard-text { color: rgb(0, 0, 0); cursor: pointer; display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; height: 54px; line-height: 18.200000762939453px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 4.526619911193848px; max-height: 54.599998474121094px; overflow-x: hidden; overflow-y: hidden; text-align: left; text-decoration: none; } p.TwitterCard-text-Large { height: 36px; } .TwitterCard-destination { color: rgb(136, 153, 166); cursor: pointer; display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; height: 18px; line-height: 18.200000762939453px; margin-top: 4.526619911193848px; max-height: 18.200000762939453px; overflow-x: hidden; overflow-y: hidden; text-align: left; text-decoration: none; text-overflow: ellipsis; text-transform: lowercase; white-space: nowrap; } .Facebook-container { -webkit-box-shadow: rgba(0, 0, 0, 0.14902) 0px 0px 0px 1px inset, rgba(0, 0, 0, 0.0980392) 0px 1px 4px 0px; background-color: rgb(255, 255, 255); box-shadow: rgba(0, 0, 0, 0.14902) 0px 0px 0px 1px inset, rgba(0, 0, 0, 0.0980392) 0px 1px 4px 0px; color: rgb(20, 24, 35); direction: ltr; display: block; font-family: helvetica, arial, sans-serif; font-size: 12px; line-height: 16px; overflow-x: hidden; overflow-y: hidden; position: relative; width: 470px; word-wrap: break-word; z-index: 0; zoom: 1; } .Facebook-container:hover { -webkit-box-shadow: rgba(0, 0, 0, 0.14902) 0px 0px 0px 1px inset, rgba(0, 0, 0, 0.14902) 0px 1px 6px 0px; background-color: rgb(255, 255, 255); box-shadow: rgba(0, 0, 0, 0.14902) 0px 0px 0px 1px inset, rgba(0, 0, 0, 0.14902) 0px 1px 6px 0px; } .Facebook-image-wrap { padding: 1px; overflow: hidden; } .Facebook-post-image { background-image: none; background-position: 50% 50%; background-repeat: no-repeat; background-size: contain; border-bottom-color: rgba(0, 0, 0, 0.0980392); border-bottom-width: 1px; border-bottom-style: solid; } .Facebook-text-container { color: rgb(20, 24, 35); direction: ltr; display: block; font-family: helvetica, arial, sans-serif; font-size: 12px; line-height: 16px; margin-bottom: 10px; margin-left: 12px; margin-right: 12px; margin-top: 10px; max-height: 100px; position: relative; width: 446px; word-wrap: break-word; } a.Facebook-link { -webkit-transition-delay: 0s; -webkit-transition-duration: 0.1s; -webkit-transition-property: color; -webkit-transition-timing-function: ease-in-out; color: rgb(20, 24, 35); cursor: pointer; direction: ltr; display: inline; font-family: Georgia, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 18px; font-weight: 500; height: auto; line-height: 22px; text-decoration: none; transition-delay: 0s; transition-duration: 0.1s; transition-property: color; transition-timing-function: ease-in-out; width: auto; word-wrap: break-word; } .Facebook-headline { -webkit-transition-delay: 0s; -webkit-transition-duration: 0.1s; -webkit-transition-property: color; -webkit-transition-timing-function: ease-in-out; color: rgb(20, 24, 35); direction: ltr; display: block; font-family: Georgia, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 18px; font-weight: 500; line-height: 22px; margin-bottom: 5px; max-height: 110px; overflow-x: hidden; overflow-y: hidden; text-decoration: none; transition-delay: 0s; transition-duration: 0.1s; transition-property: color; transition-timing-function: ease-in-out; width: 446px; word-wrap: break-word; max-height: 45px; text-overflow: ellipsis; } .Facebook-text { color: rgb(20, 24, 35); direction: ltr; display: block; font-family: helvetica, arial, sans-serif; font-size: 12px; line-height: 16px; max-height: 80px; overflow-x: hidden; overflow-y: hidden; width: 446px; word-wrap: break-word; max-height: 30px; text-overflow: ellipsis; } .Facebook-site-url-wrapper { color: rgb(20, 24, 35); direction: ltr; display: block; font-family: helvetica, arial, sans-serif; font-size: 12px; line-height: 16px; padding-top: 9px; position: relative; width: 446px; word-wrap: break-word; } .Facebook-site-url { color: rgb(145, 151, 163); direction: ltr; display: block; font-family: helvetica, arial, sans-serif; font-size: 11px; line-height: 11px; overflow-x: hidden; overflow-y: hidden; text-overflow: ellipsis; text-transform: uppercase; white-space: nowrap; width: 446px; word-wrap: break-word; } ================================================ FILE: resources/js/creator.js ================================================ // LOAD EVENTS $(function () { $('.metaPane').hide(); var value = $('#siteCreatorType').val(); value = value.capitalizeFirstLetter(); $('#'+value).show(); if (value != "Person") $('#generic').show(); $('#siteCreatorType').on('change', function(e) { $('.metaPane').hide(); $('#'+this.value).show(); if (this.value != "Person") $('#generic').show(); }); $('#preview-humans').on('click', function(e) { // Prevents the default action to be triggered. e.preventDefault(); // Triggering bPopup when click event is fired $('#preview-humans-popup').bPopup(); }); $('#geolookup').on('click', function(e) { address = $('#genericCreatorStreetAddress').val() + ", " + $('#genericCreatorAddressLocality').val() + ", " + $('#genericCreatorAddressRegion').val() + ", " + $('#genericCreatorPostalCode').val() + ", " + $('#genericCreatorAddressCountry').val(); $.ajax({ url:"//maps.googleapis.com/maps/api/geocode/json?address="+address+"&sensor=false", type: "POST", success:function(res) { $('#geolookup-errors').hide(); if (res.results.length) { $('#genericCreatorGeoLatitude').val(res.results[0].geometry.location.lat); $('#genericCreatorGeoLongitude').val(res.results[0].geometry.location.lng); } else { $('#geolookup-errors').show(); } } }); }); }); String.prototype.capitalizeFirstLetter = function() { return this.charAt(0).toUpperCase() + this.slice(1); } ================================================ FILE: resources/js/field.js ================================================ /* * Functionality for Seomatic MetaField fieldtype * by Andrew Welch - http://nystudio107.com * * Depends on: jQuery */ ;(function ( $, window, document, undefined ) { var pluginName = "SeomaticFieldType", defaults = { }; // Plugin constructor function Plugin( element, options ) { this.element = element; this.options = $.extend( {}, defaults, options) ; this._defaults = defaults; this._name = pluginName; this.init(); } Plugin.prototype = { init: function(id) { var seomatic = this, $field = $(this.element); function setPreviewFields() { var handle = $('#' + seomatic.options.prefix + seomatic.options.id + 'seoTitleSourceField').val(); var text = seomatic.options.fieldData[handle]; if (text == "") text = " "; $('#' + seomatic.options.prefix + seomatic.options.id + 'seoTitle-preview').html(text); var handle = $('#' + seomatic.options.prefix + seomatic.options.id + 'seoDescriptionSourceField').val(); var text = seomatic.options.fieldData[handle]; if (text == "") text = " "; $('#' + seomatic.options.prefix + seomatic.options.id + 'seoDescription-preview').html(text); var handle = $('#' + seomatic.options.prefix + seomatic.options.id + 'seoKeywordsSourceField').val(); var text = seomatic.options.fieldData[handle]; if (text == "") text = " "; $('#' + seomatic.options.prefix + seomatic.options.id + 'seoKeywords-preview').html(text); var handle = $('#' + seomatic.options.prefix + seomatic.options.id + 'seoImageIdSourceField').val(); var url = seomatic.options.fieldImage[handle]; if (url == "" || typeof url == 'undefined') url = seomatic.options.missing_image; $('#' + seomatic.options.prefix + seomatic.options.id + 'seoImageIdSource-preview').attr('src', url); var handle = $('#' + seomatic.options.prefix + seomatic.options.id + 'seoTwitterImageIdSourceField').val(); var url = seomatic.options.fieldImage[handle]; if (url == "" || typeof url == 'undefined') url = seomatic.options.missing_image; $('#' + seomatic.options.prefix + seomatic.options.id + 'seoTwitterImageIdSource-preview').attr('src', url); var handle = $('#' + seomatic.options.prefix + seomatic.options.id + 'seoFacebookImageIdSourceField').val(); var url = seomatic.options.fieldImage[handle]; if (url == "" || typeof url == 'undefined') url = seomatic.options.missing_image; $('#' + seomatic.options.prefix + seomatic.options.id + 'seoFacebookImageIdSource-preview').attr('src', url); } $(function () { setPreviewFields(); $('#' + seomatic.options.prefix + seomatic.options.id + 'seoKeywords').tokenfield({ createTokensOnBlur: true, }); $('#' + seomatic.options.prefix + 'preview-seometrics').on('click', function(e) { // Prevents the default action to be triggered. e.preventDefault(); // Triggering bPopup when click event is fired $('#' + seomatic.options.prefix + 'preview-seometrics-popup').bPopup(); }); $('#' + seomatic.options.prefix + 'preview-tags').on('click', function(e) { // Prevents the default action to be triggered. e.preventDefault(); // Triggering bPopup when click event is fired $('#' + seomatic.options.prefix + 'preview-tags-popup').bPopup(); }); $('#' + seomatic.options.prefix + 'preview-display').on('click', function(e) { // Prevents the default action to be triggered. e.preventDefault(); // Triggering bPopup when click event is fired $('#' + seomatic.options.prefix + 'preview-display-popup').bPopup(); }); /* -- Show/hide the select fields initially */ $('.selectFieldWrapper > div > div > div > div > select').on('change', function(e) { setPreviewFields(); }); /* -- Show/hide the select fields initially */ $('.selectField > select').each(function( index, value ) { popupValue = $(this).val(); switch (popupValue) { case "custom": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').hide(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').show(); break; case "keywords": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').show(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').hide(); break; case "field": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').show(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').hide(); break; } }); $('.selectField > select').on('change', function(e) { switch (this.value) { case "custom": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').hide(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').show(); break; case "keywords": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').show(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').hide(); break; case "field": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').show(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').hide(); break; } }); }); } }; // A really lightweight plugin wrapper around the constructor, // preventing against multiple instantiations $.fn[pluginName] = function ( options ) { return this.each(function () { if (!$.data(this, "plugin_" + pluginName)) { $.data(this, "plugin_" + pluginName, new Plugin( this, options )); } }); }; })( jQuery, window, document ); ================================================ FILE: resources/js/field_settings.js ================================================ /* * Functionality for Seomatic MetaField fieldtype settings * by Andrew Welch - http://nystudio107.com * * Depends on: jQuery */ $( document ).ready(function() { /* -- Show/hide the select fields initially */ $('.selectField > select').each(function( index, value ) { popupValue = $(this).val(); switch (popupValue) { case "custom": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').hide(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').show(); break; case "keywords": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').show(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').hide(); break; case "field": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').show(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').hide(); break; } }); $('.selectField > select').on('change', function(e) { switch (this.value) { case "custom": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').hide(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').show(); break; case "keywords": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').show(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').hide(); break; case "field": $(this).closest('.comboField-wrapper').children('.selectFieldWrapper').show(); $(this).closest('.comboField-wrapper').children('.customFieldWrapper').hide(); break; } }); }); ================================================ FILE: resources/js/identity.js ================================================ // LOAD EVENTS /* -- Define our dynamic XXX drop-down menu items */ var selectedItem = ""; function setSelectedValue(whichValue) { selectedItem = whichValue; } /* -- setSelectedValue */ function fillDynamicMenu(whichValue) { var menu = $("#siteOwnerSpecificType"); menu.empty(); if (items[whichValue]) { $.each(items[whichValue], function(){ $("<option />") .attr("value", this.value) .html(this.name) .appendTo(menu); }); } } /* -- fillDynamicMenu */ $(function () { /* -- Set the panes to the right visibility based on the settings */ $('.metaPane').hide(); $('.metaSubPane').hide(); $('.metaSpecificPane').hide(); var value = $('#siteOwnerType').val(); value = value.capitalizeFirstLetter(); if (value) $('#'+value).show(); if (value =="Person") { $('#siteOwnerSubType-field').hide(); $('#siteOwnerSpecificType-field').hide(); $('#siteOwnerSubType').val(""); $('#siteOwnerSpecificType').val(""); } var value = $('#siteOwnerSubType').val(); if (value) $('#'+value).show(); /* -- Fill in the dynamic menu */ fillDynamicMenu(value); $('#siteOwnerSpecificType').val(selectedItem); var value = $('#siteOwnerSpecificType').val(); if (value) if ($('.'+value).length != 0) $('.'+value).show(); if ($("#siteOwnerSpecificType > option").length <= 1) { $('#siteOwnerSpecificType-field').hide(); $('#siteOwnerSpecificType').val(""); } /* -- Handle clicks on the siteOwnerType dropdown */ $('#siteOwnerType').on('change', function(e) { $('.metaPane').hide(); $('.metaSubPane').hide(); $('.metaSpecificPane').hide(); if (this.value) $('#'+this.value).show(); $('#siteOwnerSubType-field').show(); $('#siteOwnerSpecificType-field').show(); var value = $('#siteOwnerSubType').val(); if (value) $('#'+value).show(); if (this.value =="Person") { $('#siteOwnerSubType-field').hide(); $('#siteOwnerSpecificType-field').hide(); $('#siteOwnerSubType').val(""); $('#siteOwnerSpecificType').val(""); } fillDynamicMenu(value); var value = $('#siteOwnerSpecificType').val(); if (value) if ($('#'+value).length != 0) $('#'+value).show(); if ($("#siteOwnerSpecificType > option").length <= 1) { $('#siteOwnerSpecificType-field').hide(); $('#siteOwnerSpecificType').val(""); } }); /* -- Handle clicks on the siteOwnerSubType dropdown */ $('#siteOwnerSubType').on('change', function(e) { $('.metaSubPane').hide(); $('.metaSpecificPane').hide(); if (this.value) $('#'+this.value).show(); fillDynamicMenu(this.value); var value = $('#siteOwnerSpecificType').val(); if (value) if ($('#'+value).length != 0) $('#'+value).show(); $('#siteOwnerSpecificType-field').show(); if ($("#siteOwnerSpecificType > option").length <= 1) { $('#siteOwnerSpecificType-field').hide(); $('#siteOwnerSpecificType').val(""); } }); /* -- Handle clicks on the siteOwnerSpecificType dropdown */ $('#siteOwnerSpecificType').on('change', function(e) { $('.metaSpecificPane').hide(); if (value) if ($('.'+this.value).length != 0) $('.'+this.value).show(); }); /* -- Handle clicks on the "Look up Latitude/Longitude" button */ $('#geolookup').on('click', function(e) { address = $('#genericOwnerStreetAddress').val() + ", " + $('#genericOwnerAddressLocality').val() + ", " + $('#genericOwnerAddressRegion').val() + ", " + $('#genericOwnerPostalCode').val() + ", " + $('#genericOwnerAddressCountry').val(); $.ajax({ url:"//maps.googleapis.com/maps/api/geocode/json?address="+address+"&sensor=false", type: "POST", success:function(res) { $('#geolookup-errors').hide(); if (res.results.length) { $('#genericOwnerGeoLatitude').val(res.results[0].geometry.location.lat); $('#genericOwnerGeoLongitude').val(res.results[0].geometry.location.lng); } else { $('#geolookup-errors').show(); } } }); }); }); String.prototype.capitalizeFirstLetter = function() { return this.charAt(0).toUpperCase() + this.slice(1); } ================================================ FILE: resources/js/main_entity_type_list.js ================================================ var main_enitity_items = { 'CreativeWork': [ {value: '', name: ''}, {value: "Article", name: "Article"}, {value: "BlogPosting", name: "    BlogPosting"}, {value: "NewsArticle", name: "    NewsArticle"}, {value: "Report", name: "    Report"}, {value: "ScholarlyArticle", name: "    ScholarlyArticle"}, {value: "SocialMediaPosting", name: "    SocialMediaPosting"}, {value: "TechArticle", name: "    TechArticle"}, {value: "Blog", name: "Blog"}, {value: "Book", name: "Book"}, {value: "Audiobook", name: "    Audiobook"}, {value: "Clip", name: "Clip"}, {value: "MovieClip", name: "    MovieClip"}, {value: "RadioClip", name: "    RadioClip"}, {value: "TVClip", name: "    TVClip"}, {value: "VideoGameClip", name: "    VideoGameClip"}, {value: "Comment", name: "Comment"}, {value: "Conversation", name: "Conversation"}, {value: "CreativeWorkSeason", name: "CreativeWorkSeason"}, {value: "RadioSeason", name: "    RadioSeason"}, {value: "TVSeason", name: "    TVSeason"}, {value: "CreativeWorkSeries", name: "CreativeWorkSeries"}, {value: "BookSeries", name: "    BookSeries"}, {value: "MovieSeries", name: "    MovieSeries"}, {value: "Periodical", name: "    Periodical"}, {value: "RadioSeries", name: "    RadioSeries"}, {value: "TVSeries", name: "    TVSeries"}, {value: "VideoGameSeries", name: "    VideoGameSeries"}, {value: "DataCatalog", name: "DataCatalog"}, {value: "Dataset", name: "Dataset"}, {value: "Datafeed", name: "    Datafeed"}, {value: "DigitalDocument", name: "DigitalDocument"}, {value: "NoteDigitalDocument", name: "    NoteDigitalDocument"}, {value: "PresentationDigitalDocument", name: "    PresentationDigitalDocument"}, {value: "SpreadsheetDigitalDocument", name: "    SpreadsheetDigitalDocument"}, {value: "TextDigitalDocument", name: "    TextDigitalDocument"}, {value: "Episode", name: "Episode"}, {value: "RadioEpisode", name: "    RadioEpisode"}, {value: "TVEpisode", name: "    TVEpisode"}, {value: "Game", name: "Game"}, {value: "VideoGame", name: "    VideoGame"}, {value: "Map", name: "Map"}, {value: "MediaObject", name: "MediaObject"}, {value: "AudioObject", name: "    AudioObject"}, {value: "DataDownload", name: "    DataDownload"}, {value: "ImageObject", name: "    ImageObject"}, {value: "MusicVideoObject", name: "    MusicVideoObject"}, {value: "VideoObject", name: "    VideoObject"}, {value: "Message", name: "Message"}, {value: "EmailMessage", name: "    EmailMessage"}, {value: "Movie", name: "Movie"}, {value: "MusicComposition", name: "MusicComposition"}, {value: "MusicPlaylist", name: "MusicPlaylist"}, {value: "MusicAlbum", name: "    MusicAlbum"}, {value: "MusicRelease", name: "    MusicRelease"}, {value: "MusicRecording", name: "MusicRecording"}, {value: "Painting", name: "Painting"}, {value: "Photograph", name: "Photograph"}, {value: "PublicationIssue", name: "PublicationIssue"}, {value: "ComicIssue", name: "    ComicIssue"}, {value: "PublicationVolume", name: "PublicationVolume"}, {value: "Question", name: "Question"}, {value: "Recipe", name: "Recipe"}, {value: "Review", name: "Review"}, {value: "ClaimReview", name: "    ClaimReview"}, {value: "Sculpture", name: "Sculpture"}, {value: "Series", name: "Series"}, {value: "SoftwareApplication", name: "SoftwareApplication"}, {value: "MobileApplication", name: "    MobileApplication"}, {value: "VideoGame", name: "    VideoGame"}, {value: "WebApplication", name: "    WebApplication"}, {value: "SoftwareSourceCode", name: "SoftwareSourceCode"}, {value: "TVSeason", name: "TVSeason"}, {value: "TVSeries", name: "TVSeries"}, {value: "VisualArtwork", name: "VisualArtwork"}, {value: "CoverArt", name: "    CoverArt"}, {value: "WebPage", name: "WebPage"}, {value: "AboutPage", name: "    AboutPage"}, {value: "CheckoutPage", name: "    CheckoutPage"}, {value: "CollectionPage", name: "    CollectionPage"}, {value: "ContactPage", name: "    ContactPage"}, {value: "ItemPage", name: "    ItemPage"}, {value: "MedicalWebPage", name: "    MedicalWebPage"}, {value: "ProfilePage", name: "    ProfilePage"}, {value: "QAPage", name: "    QAPage"}, {value: "SearchResultsPage", name: "    SearchResultsPage"}, ], 'Event': [ {value: '', name: ''}, {value: "BusinessEvent", name: "BusinessEvent"}, {value: "ChildrensEvent", name: "ChildrensEvent"}, {value: "ComedyEvent", name: "ComedyEvent"}, {value: "CourseInstance", name: "CourseInstance"}, {value: "DanceEvent", name: "DanceEvent"}, {value: "DeliveryEvent", name: "DeliveryEvent"}, {value: "EducationEvent", name: "EducationEvent"}, {value: "ExhibitionEvent", name: "ExhibitionEvent"}, {value: "EventSeries", name: "EventSeries"}, {value: "Festival", name: "Festival"}, {value: "FoodEvent", name: "FoodEvent"}, {value: "LiteraryEvent", name: "LiteraryEvent"}, {value: "MusicEvent", name: "MusicEvent"}, {value: "PublicationEvent", name: "PublicationEvent"}, {value: "SaleEvent", name: "SaleEvent"}, {value: "ScreeningEvent", name: "ScreeningEvent"}, {value: "SocialEvent", name: "SocialEvent"}, {value: "SportsEvent", name: "SportsEvent"}, {value: "TheaterEvent", name: "TheaterEvent"}, {value: "VisualArtsEvent", name: "VisualArtsEvent"}, ], 'Organization': [ {value: '', name: ''}, {value: "Airline", name: "Airline"}, {value: "Corporation", name: "Corporation"}, {value: "EducationalOrganization", name: "EducationalOrganization"}, {value:'CollegeOrUniversity', name: '    College Or University'}, {value:'ElementarySchool', name: '    Elementary School'}, {value:'HighSchool', name: '    High School'}, {value:'MiddleSchool', name: '    Middle School'}, {value:'Preschool', name: '    Preschool'}, {value:'School', name: '    School'}, {value: "GovernmentOrganization", name: "Government Organization"}, {value: "LocalBusiness", name: "Local Business"}, {value: 'AnimalShelter', name: '    Animal Shelter'}, {value: 'AutomotiveBusiness', name: '    Automotive Business'}, {value: 'AutoBodyShop', name: '        Auto Body Shop'}, {value: 'AutoDealer', name: '        Auto Dealer'}, {value: 'AutoPartsStore', name: '        Auto Parts Store'}, {value: 'AutoRental', name: '        Auto Rental'}, {value: 'AutoRepair', name: '        Auto Repair'}, {value: 'AutoWash', name: '        Auto Wash'}, {value: 'GasStation', name: '        Gas Station'}, {value: 'MotorcycleDealer', name: '        Motorcycle Dealer'}, {value: 'MotorcycleRepair', name: '        Motorcycle Repair'}, {value: 'ChildCare', name: '    Child Care'}, {value: 'DryCleaningOrLaundry', name: '    Dry Cleaning Or Laundry'}, {value: 'EmergencyService', name: '    Emergency Service'}, {value: 'FireStation', name: '        Fire Station'}, {value: 'Hospital', name: '        Hospital'}, {value: 'PoliceStation', name: '        Police Station'}, {value: 'EmploymentAgency', name: '    Employment Agency'}, {value: 'EntertainmentBusiness', name: '    Entertainment Business'}, {value: 'AdultEntertainment', name: '        Adult Entertainment'}, {value: 'AmusementPark', name: '        Amusement Park'}, {value: 'ArtGallery', name: '        Art Gallery'}, {value: 'Casino', name: '        Casino'}, {value: 'ComedyClub', name: '        Comedy Club'}, {value: 'MovieTheater', name: '        Movie Theater'}, {value: 'NightClub', name: '        Night Club'}, {value: 'FinancialService', name: '    Financial Service'}, {value: 'AccountingService', name: '        Accounting Service'}, {value: 'AutomatedTeller', name: '        Automated Teller'}, {value: 'BankOrCreditUnion', name: '        Bank Or Credit Union'}, {value: 'InsuranceAgency', name: '        Insurance Agency'}, {value: 'FoodEstablishment', name: '    Food Establishment'}, {value: 'Bakery', name: '        Bakery'}, {value: 'BarOrPub', name: '        Bar Or Pub'}, {value: 'Brewery', name: '        Brewery'}, {value: 'CafeOrCoffeeShop', name: '        Cafe Or Coffee Shop'}, {value: 'FastFoodRestaurant', name: '        Fast Food Restaurant'}, {value: 'IceCreamShop', name: '        Ice Cream Shop'}, {value: 'Restaurant', name: '        Restaurant'}, {value: 'Winery', name: '        Winery'}, {value: 'GovernmentOffice', name: '    Government Office'}, {value: 'PostOffice', name: '        Post Office'}, {value: 'HealthAndBeautyBusiness', name: '    Health And Beauty Business'}, {value: 'BeautySalon', name: '        Beauty Salon'}, {value: 'DaySpa', name: '        Day Spa'}, {value: 'HairSalon', name: '        Hair Salon'}, {value: 'HealthClub', name: '        Health Club'}, {value: 'NailSalon', name: '        Nail Salon'}, {value: 'TattooParlor', name: '        Tattoo Parlor'}, {value: 'HomeAndConstructionBusiness', name: '    Home And Construction Business'}, {value: 'Electrician', name: '        Electrician'}, {value: 'GeneralContractor', name: '        General Contractor'}, {value: 'HVACBusiness', name: '        HVAC Business'}, {value: 'HousePainter', name: '        House Painter'}, {value: 'Locksmith', name: '        Locksmith'}, {value: 'MovingCompany', name: '        Moving Company'}, {value: 'Plumber', name: '        Plumber'}, {value: 'RoofingContractor', name: '        Roofing Contractor'}, {value: 'InternetCafe', name: '    Internet Cafe'}, {value: 'LegalService', name: '    Legal Service'}, {value: 'Attorney', name: '        Attorney'}, {value: 'Notary', name: '        Notary'}, {value: 'Library', name: '    Library'}, {value: 'LodgingBusiness', name: '    Lodging Business'}, {value: 'BedAndBreakfast', name: '        Bed And Breakfast'}, {value: 'Hostel', name: '        Hostel'}, {value: 'Hotel', name: '        Hotel'}, {value: 'Motel', name: '        Motel'}, {value: 'MedicalOrganization', name: '    Medical Organization'}, {value: 'Dentist', name: '        Dentist'}, {value: 'DiagnosticLab', name: '        Diagnostic Lab'}, {value: 'Hospital', name: '        Hospital'}, {value: 'MedicalClinic', name: '        Medical Clinic'}, {value: 'Optician', name: '        Optician'}, {value: 'Pharmacy', name: '        Pharmacy'}, {value: 'Physician', name: '        Physician'}, {value: 'VeterinaryCare', name: '        Veterinary Care'}, {value: 'ProfessionalService', name: '    Professional Service'}, {value: 'RadioStation', name: '    Radio Station'}, {value: 'RealEstateAgent', name: '    Real Estate Agent'}, {value: 'RecyclingCenter', name: '    Recycling Center'}, {value: 'SelfStorage', name: '    Self Storage'}, {value: 'ShoppingCenter', name: '    Shopping Center'}, {value: 'SportsActivityLocation', name: '    Sports Activity Location'}, {value: 'BowlingAlley', name: '        Bowling Alley'}, {value: 'ExerciseGym', name: '        Exercise Gym'}, {value: 'GolfCourse', name: '        Golf Course'}, {value: 'HealthClub', name: '        Health Club'}, {value: 'PublicSwimmingPool', name: '        Public Swimming Pool'}, {value: 'SkiResort', name: '        Ski Resort'}, {value: 'SportsClub', name: '        Sports Club'}, {value: 'StadiumOrArena', name: '        Stadium Or Arena'}, {value: 'TennisComplex', name: '        Tennis Complex'}, {value: 'Store', name: '    Store'}, {value: 'AutoPartsStore', name: '        Auto Parts Store'}, {value: 'BikeStore', name: '        Bike Store'}, {value: 'BookStore', name: '        Book Store'}, {value: 'ClothingStore', name: '        Clothing Store'}, {value: 'ComputerStore', name: '        Computer Store'}, {value: 'ConvenienceStore', name: '        Convenience Store'}, {value: 'DepartmentStore', name: '        Department Store'}, {value: 'ElectronicsStore', name: '        Electronics Store'}, {value: 'Florist', name: '        Florist'}, {value: 'FurnitureStore', name: '        Furniture Store'}, {value: 'GardenStore', name: '        Garden Store'}, {value: 'GroceryStore', name: '        Grocery Store'}, {value: 'HardwareStore', name: '        Hardware Store'}, {value: 'HobbyShop', name: '        Hobby Shop'}, {value: 'HomeGoodsStore', name: '        Home Goods Store'}, {value: 'JewelryStore', name: '        Jewelry Store'}, {value: 'LiquorStore', name: '        Liquor Store'}, {value: 'MensClothingStore', name: '        Mens Clothing Store'}, {value: 'MobilePhoneStore', name: '        Mobile Phone Store'}, {value: 'MovieRentalStore', name: '        Movie Rental Store'}, {value: 'MusicStore', name: '        Music Store'}, {value: 'OfficeEquipmentStore', name: '        Office Equipment Store'}, {value: 'OutletStore', name: '        Outlet Store'}, {value: 'PawnShop', name: '        Pawn Shop'}, {value: 'PetStore', name: '        Pet Store'}, {value: 'ShoeStore', name: '        Shoe Store'}, {value: 'SportingGoodsStore', name: '        Sporting Goods Store'}, {value: 'TireShop', name: '        Tire Shop'}, {value: 'ToyStore', name: '        Toy Store'}, {value: 'WholesaleStore', name: '        Wholesale Store'}, {value: 'TelevisionStation', name: '    Television Station'}, {value: 'TouristInformationCenter', name: '    Tourist Information Center'}, {value: 'TravelAgency', name: '    Travel Agency'}, {value: "NGO", name: "NGO"}, {value: "PerformingGroup", name: "Performing Group"}, {value:'DanceGroup', name: '    Dance Group'}, {value:'MusicGroup', name: '    Music Group'}, {value:'TheaterGroup', name: '    Theater Group'}, {value: "SportsOrganization", name: "Sports Organization"}, {value:'SportsTeam', name: '    Sports Team'}, ], 'Person': [ {value: '', name: ''}, {value: "Patient", name: "Patient"}, ], 'Product': [ {value: '', name: ''}, {value: "IndividualProduct", name: "IndividualProduct"}, {value: "ProductModel", name: "ProductModel"}, {value: "SomeProducts", name: "SomeProducts"}, {value: "Vehicle", name: "Vehicle"}, ], }; ================================================ FILE: resources/js/meta.js ================================================ var selectedItem = ""; if (typeof metaFieldPrefix == 'undefined') var metaFieldPrefix = ""; function setSelectedValue(whichValue) { selectedItem = whichValue; } /* -- setSelectedValue */ function fillDynamicMenu(whichValue) { var menu = $('#' + metaFieldPrefix + 'seoMainEntityOfPage'); menu.empty(); if (main_enitity_items[whichValue]) { $.each(main_enitity_items[whichValue], function(){ $("<option />") .attr("value", this.value) .html(this.name) .appendTo(menu); }); } } /* -- fillDynamicMenu */ function updateInfoLink() { var selectedItem = $('#' + metaFieldPrefix + 'seoMainEntityOfPage').val(); var value = $('#' + metaFieldPrefix + 'seoMainEntityCategory').val(); if (selectedItem) $('.seomaticSchemaInfo').html("<a href='http://schema.org/" + selectedItem + "' target='_blank'>" + selectedItem + " info...</a>"); else $('.seomaticSchemaInfo').html("<a href='http://schema.org/" + value + "' target='_blank'>" + value + " info...</a>"); } /* -- updateInfoLink */ $(function () { if ($('#' + metaFieldPrefix + 'seoKeywords').length) { $('#' + metaFieldPrefix + 'seoKeywords').tokenfield({ createTokensOnBlur: true, }); } /* -- Set the panes to the right visibility based on the settings */ var value = $('#' + metaFieldPrefix + 'seoMainEntityCategory').val(); /* -- Fill in the dynamic menu */ fillDynamicMenu(value); $('#' + metaFieldPrefix + 'seoMainEntityOfPage').val(selectedItem); updateInfoLink(); /* -- Handle clicks on the seoMainEntityCategory dropdown */ $('#' + metaFieldPrefix + 'seoMainEntityCategory').on('change', function(e) { var value = $('#' + metaFieldPrefix + 'seoMainEntityCategory').val(); fillDynamicMenu(value); updateInfoLink(); }); /* -- Handle clicks on the seoMainEntityOfPage dropdown */ $('#' + metaFieldPrefix + 'seoMainEntityOfPage').on('change', function(e) { updateInfoLink(); }); }); ================================================ FILE: resources/js/metalist.js ================================================ // LOAD EVENTS $(function () { // Behavior for "New Meta" button $('#new-meta').on('click', function () { // Redirect window.location = Craft.getUrl('seomatic/meta/new'); }); }); ================================================ FILE: resources/js/seomatic.js ================================================ // LOAD EVENTS $(function () { $('#preview-seometrics').on('click', function(e) { // Prevents the default action to be triggered. e.preventDefault(); // Triggering bPopup when click event is fired $('#preview-seometrics-popup').bPopup(); }); $('#preview-display').on('click', function(e) { // Prevents the default action to be triggered. e.preventDefault(); // Triggering bPopup when click event is fired $('#preview-display-popup').bPopup(); }); $('#preview-tags').on('click', function(e) { // Prevents the default action to be triggered. e.preventDefault(); // Triggering bPopup when click event is fired $('#preview-tags-popup').bPopup(); }); }); ================================================ FILE: resources/js/site.js ================================================ // LOAD EVENTS $(function () { $('#siteSeoKeywords').tokenfield({ createTokensOnBlur: true, }); $('#preview-robots').on('click', function(e) { // Prevents the default action to be triggered. e.preventDefault(); // Triggering bPopup when click event is fired $('#preview-robots-popup').bPopup(); }); }); ================================================ FILE: resources/js/type_list.js ================================================ var items = { 'Airline': [ {value: '', name: ''}, ], 'Corporation': [ {value: '', name: ''}, ], 'EducationalOrganization': [ {name: '', value:''}, {name: 'College Or University', value:'CollegeOrUniversity'}, {name: 'Elementary School', value:'ElementarySchool'}, {name: 'High School', value:'HighSchool'}, {name: 'Middle School', value:'MiddleSchool'}, {name: 'Preschool', value:'Preschool'}, {name: 'School', value:'School'}, ], 'GovernmentOrganization': [ {value: '', name: ''}, ], 'LocalBusiness': [ {value: '', name: ''}, {value: 'AnimalShelter', name: 'Animal Shelter'}, {value: 'AutomotiveBusiness', name: 'Automotive Business'}, {value: 'AutoBodyShop', name: '    Auto Body Shop'}, {value: 'AutoDealer', name: '    Auto Dealer'}, {value: 'AutoPartsStore', name: '    Auto Parts Store'}, {value: 'AutoRental', name: '    Auto Rental'}, {value: 'AutoRepair', name: '    Auto Repair'}, {value: 'AutoWash', name: '    Auto Wash'}, {value: 'GasStation', name: '    Gas Station'}, {value: 'MotorcycleDealer', name: '    Motorcycle Dealer'}, {value: 'MotorcycleRepair', name: '    Motorcycle Repair'}, {value: 'ChildCare', name: 'Child Care'}, {value: 'DryCleaningOrLaundry', name: 'Dry Cleaning Or Laundry'}, {value: 'EmergencyService', name: 'Emergency Service'}, {value: 'FireStation', name: '    Fire Station'}, {value: 'Hospital', name: '    Hospital'}, {value: 'PoliceStation', name: '    Police Station'}, {value: 'EmploymentAgency', name: 'Employment Agency'}, {value: 'EntertainmentBusiness', name: 'Entertainment Business'}, {value: 'AdultEntertainment', name: '    Adult Entertainment'}, {value: 'AmusementPark', name: '    Amusement Park'}, {value: 'ArtGallery', name: '    Art Gallery'}, {value: 'Casino', name: '    Casino'}, {value: 'ComedyClub', name: '    Comedy Club'}, {value: 'MovieTheater', name: '    Movie Theater'}, {value: 'NightClub', name: '    Night Club'}, {value: 'FinancialService', name: 'Financial Service'}, {value: 'AccountingService', name: '    Accounting Service'}, {value: 'AutomatedTeller', name: '    Automated Teller'}, {value: 'BankOrCreditUnion', name: '    Bank Or Credit Union'}, {value: 'InsuranceAgency', name: '    Insurance Agency'}, {value: 'FoodEstablishment', name: 'Food Establishment'}, {value: 'Bakery', name: '    Bakery'}, {value: 'BarOrPub', name: '    Bar Or Pub'}, {value: 'Brewery', name: '    Brewery'}, {value: 'CafeOrCoffeeShop', name: '    Cafe Or Coffee Shop'}, {value: 'FastFoodRestaurant', name: '    Fast Food Restaurant'}, {value: 'IceCreamShop', name: '    Ice Cream Shop'}, {value: 'Restaurant', name: '    Restaurant'}, {value: 'Winery', name: '    Winery'}, {value: 'GovernmentOffice', name: 'Government Office'}, {value: 'PostOffice', name: '    Post Office'}, {value: 'HealthAndBeautyBusiness', name: 'Health And Beauty Business'}, {value: 'BeautySalon', name: '    Beauty Salon'}, {value: 'DaySpa', name: '    Day Spa'}, {value: 'HairSalon', name: '    Hair Salon'}, {value: 'HealthClub', name: '    Health Club'}, {value: 'NailSalon', name: '    Nail Salon'}, {value: 'TattooParlor', name: '    Tattoo Parlor'}, {value: 'HomeAndConstructionBusiness', name: 'Home And Construction Business'}, {value: 'Electrician', name: '    Electrician'}, {value: 'GeneralContractor', name: '    General Contractor'}, {value: 'HVACBusiness', name: '    HVAC Business'}, {value: 'HousePainter', name: '    House Painter'}, {value: 'Locksmith', name: '    Locksmith'}, {value: 'MovingCompany', name: '    Moving Company'}, {value: 'Plumber', name: '    Plumber'}, {value: 'RoofingContractor', name: '    Roofing Contractor'}, {value: 'InternetCafe', name: 'Internet Cafe'}, {value: 'LegalService', name: 'Legal Service'}, {value: 'Attorney', name: '    Attorney'}, {value: 'Notary', name: '    Notary'}, {value: 'Library', name: 'Library'}, {value: 'LodgingBusiness', name: 'Lodging Business'}, {value: 'BedAndBreakfast', name: '    Bed And Breakfast'}, {value: 'Hostel', name: '    Hostel'}, {value: 'Hotel', name: '    Hotel'}, {value: 'Motel', name: '    Motel'}, {value: 'MedicalOrganization', name: 'Medical Organization'}, {value: 'Dentist', name: '    Dentist'}, {value: 'DiagnosticLab', name: '    Diagnostic Lab'}, {value: 'Hospital', name: '    Hospital'}, {value: 'MedicalClinic', name: '    Medical Clinic'}, {value: 'Optician', name: '    Optician'}, {value: 'Pharmacy', name: '    Pharmacy'}, {value: 'Physician', name: '    Physician'}, {value: 'VeterinaryCare', name: '    Veterinary Care'}, {value: 'ProfessionalService', name: 'Professional Service'}, {value: 'RadioStation', name: 'Radio Station'}, {value: 'RealEstateAgent', name: 'Real Estate Agent'}, {value: 'RecyclingCenter', name: 'Recycling Center'}, {value: 'SelfStorage', name: 'Self Storage'}, {value: 'ShoppingCenter', name: 'Shopping Center'}, {value: 'SportsActivityLocation', name: 'Sports Activity Location'}, {value: 'BowlingAlley', name: '    Bowling Alley'}, {value: 'ExerciseGym', name: '    Exercise Gym'}, {value: 'GolfCourse', name: '    Golf Course'}, {value: 'HealthClub', name: '    Health Club'}, {value: 'PublicSwimmingPool', name: '    Public Swimming Pool'}, {value: 'SkiResort', name: '    Ski Resort'}, {value: 'SportsClub', name: '    Sports Club'}, {value: 'StadiumOrArena', name: '    Stadium Or Arena'}, {value: 'TennisComplex', name: '    Tennis Complex'}, {value: 'Store', name: 'Store'}, {value: 'AutoPartsStore', name: '    Auto Parts Store'}, {value: 'BikeStore', name: '    Bike Store'}, {value: 'BookStore', name: '    Book Store'}, {value: 'ClothingStore', name: '    Clothing Store'}, {value: 'ComputerStore', name: '    Computer Store'}, {value: 'ConvenienceStore', name: '    Convenience Store'}, {value: 'DepartmentStore', name: '    Department Store'}, {value: 'ElectronicsStore', name: '    Electronics Store'}, {value: 'Florist', name: '    Florist'}, {value: 'FurnitureStore', name: '    Furniture Store'}, {value: 'GardenStore', name: '    Garden Store'}, {value: 'GroceryStore', name: '    Grocery Store'}, {value: 'HardwareStore', name: '    Hardware Store'}, {value: 'HobbyShop', name: '    Hobby Shop'}, {value: 'HomeGoodsStore', name: '    Home Goods Store'}, {value: 'JewelryStore', name: '    Jewelry Store'}, {value: 'LiquorStore', name: '    Liquor Store'}, {value: 'MensClothingStore', name: '    Mens Clothing Store'}, {value: 'MobilePhoneStore', name: '    Mobile Phone Store'}, {value: 'MovieRentalStore', name: '    Movie Rental Store'}, {value: 'MusicStore', name: '    Music Store'}, {value: 'OfficeEquipmentStore', name: '    Office Equipment Store'}, {value: 'OutletStore', name: '    Outlet Store'}, {value: 'PawnShop', name: '    Pawn Shop'}, {value: 'PetStore', name: '    Pet Store'}, {value: 'ShoeStore', name: '    Shoe Store'}, {value: 'SportingGoodsStore', name: '    Sporting Goods Store'}, {value: 'TireShop', name: '    Tire Shop'}, {value: 'ToyStore', name: '    Toy Store'}, {value: 'WholesaleStore', name: '    Wholesale Store'}, {value: 'TelevisionStation', name: 'Television Station'}, {value: 'TouristInformationCenter', name: 'Tourist Information Center'}, {value: 'TravelAgency', name: 'Travel Agency'}, ], 'NGO': [ {value: '', name: ''}, ], 'PerformingGroup': [ {name: '', value:''}, {name: 'Dance Group', value:'DanceGroup'}, {name: 'Music Group', value:'MusicGroup'}, {name: 'Theater Group', value:'TheaterGroup'}, ], 'SportsOrganization': [ {name: '', value:''}, {name: 'Sports Team', value:'SportsTeam'}, ], }; ================================================ FILE: services/SeomaticService.php ================================================ <?php namespace Craft; use \crodas\TextRank\Config; use \crodas\TextRank\TextRank; use \crodas\TextRank\Summary; use \crodas\TextRank\Stopword; class SeomaticService extends BaseApplicationComponent { protected $entryMeta = null; protected $lastElement = null; protected $entrySeoCommerceVariants = null; protected $cachedSettings = array(); protected $cachedSiteMeta = array(); protected $cachedIdentity = array(); protected $cachedIdentityJSONLD = array(); protected $cachedSocial = array(); protected $cachedCreator = array(); protected $cachedCreatorJSONLD = array(); protected $cachedProductJSONLD = array(); protected $cachedMainEntityOfPageJSONLD = array(); protected $cachedWebSiteJSONLD = array(); protected $renderedMetaVars = null; /* -------------------------------------------------------------------------------- Render the all of the SEO Meta, caching it if possible -------------------------------------------------------------------------------- */ public function renderSiteMeta($templatePath="", $metaVars=null, $locale) { $this->renderedMetaVars = $metaVars; /* -- Handle the SEOmetrics */ if (craft()->request->isLivePreview() && craft()->config->get("displaySeoMetrics", "seomatic")) $this->renderSeoMetrics(); /* -- Cache the results for speediness; 1 query to rule them all */ $shouldCache = ($metaVars != null); if (craft()->config->get('devMode')) $shouldCache = false; if ($shouldCache) { $cacheKey = 'seomatic_metacache_' . $this->getMetaHashStr($templatePath, $metaVars); $cache = craft()->cache->get($cacheKey); if ($cache) return $cache; } /* -- If Minify is installed, minify all the things */ try { if (craft()->plugins->getPlugin('Minify')) $htmlText = craft()->minify->htmlMin($this->render($templatePath, $metaVars)); else $htmlText = $this->render($templatePath, $metaVars); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderSiteMeta(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } if ($shouldCache) craft()->cache->set($cacheKey, $htmlText, null); return $htmlText; } /* -- renderSiteMeta */ /* -------------------------------------------------------------------------------- Render the all of the SEO Meta for a "headless" instance of Craft $templatePath - the template to use to render the meta, "" for the default $entry - the Entry ElementType for this render, null otherwise $forTemplate - the Craft template path for this request, e.g. "blog/index" $locale - the locale for this render -------------------------------------------------------------------------------- */ public function headlessRenderSiteMeta($templatePath="", $entry = null, $forTemplate="", $locale) { $renderedHTML = ""; if (!$locale) $locale = craft()->language; /* -- If there is an entry associated with this meta render that has an SEOmatic FieldType in it, make sure it is included */ if ($entry) { $entryMeta = craft()->seomatic->getMetaFromElement($entry); if ($entryMeta) craft()->seomatic->setEntryMeta($entryMeta, ""); } /* -- Get the SEOmatic globals for the current template / entry / global meta context */ $metaVars = craft()->seomatic->getGlobals($forTemplate, $locale); /* -- Call SEOmatic to render the actual meta for us */ $renderedHTML = craft()->seomatic->renderSiteMeta($forTemplate, $metaVars, $locale); return $renderedHTML; } /* -- headlessRenderSiteMeta */ /* -------------------------------------------------------------------------------- Render the SEOmatic template -------------------------------------------------------------------------------- */ public function render($templatePath="", $metaVars=null, $isPreview=false) { if ($templatePath) { try { if ($metaVars) { $this->sanitizeMetaVars($metaVars); $htmlText = craft()->templates->render($templatePath, $metaVars); } else $htmlText = craft()->templates->render($templatePath); } catch (\Exception $e) { $htmlText = 'Error rendering template in render(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } } else { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the core template */ $templateName = '_seo_meta'; if ($isPreview) $templateName = $templateName . 'Preview'; try { if ($metaVars) { $this->sanitizeMetaVars($metaVars); $htmlText = craft()->templates->render($templateName, $metaVars); } else $htmlText = craft()->templates->render($templateName); } catch (\Exception $e) { $htmlText = 'Error rendering template in render(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); } return $htmlText; } /* -- render */ /* -------------------------------------------------------------------------------- Render a generic JSON-LD object, passed in as an array() in the format: PHP: $myJSONLD = array( "type" => "Corporation", "name" => "nystudio107", "sameAs" => ["https://Twitter.com/nystudio107","https://plus.google.com/+nystudio107"], "address" => array( "type" => 'PostalAddress', "addressCountry" => "USA", ), ); Twig: {% set myJSONLD = { "type": "Corporation", "name": "nystudio107", "sameAs": ["https://Twitter.com/nystudio107","https://plus.google.com/+nystudio107"], "address": { "type": 'PostalAddress', "addressCountry": "USA", }, } %} The array can be nested arbitrarily deep with sub-arrays. The first key in the array, and in each sub-array, should be an "type" with a valid Schema.org type as the value. Because Twig doesn't support array keys with non-alphanumeric characters, SEOmatic transforms the keys "type" into "@type" at render time. -------------------------------------------------------------------------------- */ public function renderJSONLD($object=array(), $isPreview=false) { $vars = array("object" => $object); $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the core template */ $templateName = 'json-ld/_json-ld'; try { if (craft()->plugins->getPlugin('Minify') && !$isPreview) $htmlText = craft()->minify->jsMin($htmlText = craft()->templates->render($templateName, $vars)); else $htmlText = craft()->templates->render($templateName, $vars); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderJSONLD(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); return $htmlText; } /* -- renderJSONLD */ /* -------------------------------------------------------------------------------- Render the SEOmatic display preview template -------------------------------------------------------------------------------- */ public function renderDisplayPreview($templateName="", $metaVars) { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the SEOmatic display preview template */ $this->sanitizeMetaVars($metaVars); try { $htmlText = craft()->templates->render($templateName, $metaVars); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderDisplayPreview(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); return $htmlText; } /* -- renderDisplayPreview */ /* -------------------------------------------------------------------------------- Render the SEOmatic Identity template -------------------------------------------------------------------------------- */ public function renderIdentity($metaVars, $locale, $isPreview=false) { $this->sanitizeMetaVars($metaVars); $htmlText = $this->renderJSONLD($metaVars['seomaticIdentity'], $isPreview); return $htmlText; } /* -- renderIdentity */ /* -------------------------------------------------------------------------------- Render the SEOmatic WebSite template -------------------------------------------------------------------------------- */ public function renderWebsite($metaVars, $locale, $isPreview=false) { $this->sanitizeMetaVars($metaVars); $webSite = $this->getWebSiteJSONLD($metaVars, $locale); $htmlText = $this->renderJSONLD($webSite, $isPreview); return $htmlText; } /* -- renderWebsite */ /* -------------------------------------------------------------------------------- Render the Main Entity of Page JSON-LD -------------------------------------------------------------------------------- */ public function renderMainEntityOfPage($metaVars, $locale, $isPreview=false) { $htmlText = ""; if (isset($metaVars['seomaticMainEntityOfPage'])) { $this->sanitizeMetaVars($metaVars); $htmlText = $this->renderJSONLD($metaVars['seomaticMainEntityOfPage'], $isPreview); } return $htmlText; } /* -- renderMainEntityOfPage */ /* -------------------------------------------------------------------------------- Render the Breadcrumbs JSON-LD -------------------------------------------------------------------------------- */ public function renderBreadcrumbs($metaVars, $locale, $isPreview=false) { $htmlText = ""; if (!empty($metaVars['seomaticMeta']['breadcrumbs'])) { $this->sanitizeMetaVars($metaVars); $crumbsJSON = $this->getBreadcrumbsJSONLD($metaVars['seomaticMeta']['breadcrumbs']); $this->sanitizeArray($crumbsJSON); $htmlText = $this->renderJSONLD($crumbsJSON, $isPreview); } return $htmlText; } /* -- renderBreadcrumbs */ /* -------------------------------------------------------------------------------- Render the SEOmatic Place template -------------------------------------------------------------------------------- */ public function renderPlace($metaVars, $locale, $isPreview=false) { $htmlText = ""; if (($metaVars['seomaticIdentity']['type'] != "Person") && (isset($metaVars['seomaticIdentity']['location']))) { $this->sanitizeMetaVars($metaVars); $place = $metaVars['seomaticIdentity']['location']; if (array_keys($place) !== range(0, count($place) - 1)) { $htmlText = $this->renderJSONLD($place, $isPreview); } else { foreach($place as $places) { $htmlText .= $this->renderJSONLD($places, $isPreview); } } } return $htmlText; } /* -- renderPlace */ /* -------------------------------------------------------------------------------- Render the Google Tag Manager <script> tags -------------------------------------------------------------------------------- */ public function renderGoogleTagManager($metaVars, $locale, $isPreview=false) { $htmlText = ""; $shouldRenderGTM = craft()->config->get("renderGoogleTagManagerScript", "seomatic"); $metaVars['gtmDataLayerVariableName'] = craft()->config->get("gtmDataLayerVariableName", "seomatic"); if (($shouldRenderGTM) || ($isPreview)) { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the core template */ $templateName = '_googleTagManager'; try { if (craft()->plugins->getPlugin('Minify') && !$isPreview) $htmlText = craft()->minify->jsMin($htmlText = craft()->templates->render($templateName, $metaVars)); else $htmlText = craft()->templates->render($templateName, $metaVars); method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderGoogleTagManager(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } } return $htmlText; } /* -- renderGoogleTagManager */ /* -------------------------------------------------------------------------------- Render the Google Analytics <script> tags -------------------------------------------------------------------------------- */ public function renderGoogleAnalytics($metaVars, $locale, $isPreview=false) { $htmlText = ""; $shouldRenderGA = craft()->config->get("renderGoogleAnalyticsScript", "seomatic"); if (($shouldRenderGA) || ($isPreview)) { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the core template */ $templateName = '_googleAnalytics'; try { if (craft()->plugins->getPlugin('Minify') && !$isPreview) $htmlText = craft()->minify->jsMin($htmlText = craft()->templates->render($templateName, $metaVars)); else $htmlText = craft()->templates->render($templateName, $metaVars); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderGoogleAnalytics(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); } return $htmlText; } /* -- renderGoogleAnalytics */ /* -------------------------------------------------------------------------------- Render the SEOmatic globals -------------------------------------------------------------------------------- */ public function renderGlobals($metaVars, $forTemplate="") { $htmlText = ""; $this->sanitizeMetaVars($metaVars); $htmlText = $this->_print_twig_array($metaVars, 0); return $htmlText; } /* -- renderGlobals */ /* -------------------------------------------------------------------------------- Render the humans.txt template -------------------------------------------------------------------------------- */ public function renderHumans($isPreview=false) { $templatePath = ''; $locale = ''; if (!$locale) $locale = craft()->language; $metaVars = craft()->seomatic->getGlobals('', $locale); if ($templatePath) { try { $htmlText = craft()->templates->render($templatePath); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderHumans(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } } else { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the core template */ $templateName = '_humans'; if ($isPreview) $templateName = $templateName . 'Preview'; try { $htmlText = craft()->templates->render($templateName, $metaVars); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderHumans(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); } return $htmlText; } /* -- renderHumans */ /* -------------------------------------------------------------------------------- Render the humans.txt user-defined template -------------------------------------------------------------------------------- */ public function renderHumansTemplate() { $templatePath = ''; $locale = ''; if (!$locale) $locale = craft()->language; $metaVars = craft()->seomatic->getGlobals('', $locale); $creator = craft()->seomatic->getCreator($locale); /* -- Render the user-defined Humans.txt template */ $template = $creator['genericCreatorHumansTxt']; try { $htmlText = craft()->templates->renderString($template, $metaVars); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderHumansTemplate(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } return $htmlText; } /* -- renderHumansTemplate */ /* -------------------------------------------------------------------------------- Render the robots.txt template -------------------------------------------------------------------------------- */ public function renderRobots($isPreview=false) { $templatePath = ''; $locale = ''; if (!$locale) $locale = craft()->language; $metaVars = craft()->seomatic->getGlobals('', $locale); if ($templatePath) { try { $htmlText = craft()->templates->render($templatePath); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderRobots(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } } else { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the core template */ $templateName = '_robots'; if ($isPreview) $templateName = $templateName . 'Preview'; try { $htmlText = craft()->templates->render($templateName, $metaVars); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderRobots(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); } return $htmlText; } /* -- renderRobots */ /* -------------------------------------------------------------------------------- Render the robots.txt user-defined template -------------------------------------------------------------------------------- */ public function renderRobotsTemplate() { $templatePath = ''; $locale = ''; if (!$locale) $locale = craft()->language; $metaVars = craft()->seomatic->getGlobals('', $locale); $siteMeta = craft()->seomatic->getSiteMeta($locale); /* -- Render the user-defined robots.txt template */ $template = $siteMeta['siteRobotsTxt']; try { $htmlText = craft()->templates->renderString($template, $metaVars); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderRobotsTemplate(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } return $htmlText; } /* -- renderRobotsTemplate */ /* -------------------------------------------------------------------------------- Render the SEOmetrics template during LivePreview -------------------------------------------------------------------------------- */ public function renderSeoMetrics() { $oldPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); $newPath = craft()->path->getPluginsPath().'seomatic/templates'; method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($newPath) : craft()->path->setTemplatesPath($newPath); /* -- Render the SEOmatic metrics floater template */ $requestUrl = $this->getFullyQualifiedUrl(craft()->request->url); $keywords = ""; $urlParams = array( 'url' => $requestUrl, 'keywords' => $keywords, ); $metricsActionUrl = UrlHelper::getActionUrl('seomatic/renderMetrics', $urlParams); $vars = array( 'metricsActionUrl' => $metricsActionUrl, ); try { $htmlText = craft()->templates->render('_seo_metrics_floater.twig', $vars); } catch (\Exception $e) { $htmlText = 'Error rendering template in renderSeoMetrics(): ' . $e->getMessage(); SeomaticPlugin::log($htmlText, LogLevel::Error); } craft()->templates->includeFootHtml($htmlText); method_exists(craft()->templates, 'setTemplatesPath') ? craft()->templates->setTemplatesPath($oldPath) : craft()->path->setTemplatesPath($oldPath); } /* -- renderSeoMetrics */ /* -------------------------------------------------------------------------------- Try to extract an seomaticMeta field from an element -------------------------------------------------------------------------------- */ public function getMetaFromElement($element) { /* -- See if there is an 'entry' automagically put into this template, and if it contains an Seomatic_Meta */ $entryMeta = null; if (isset($element) && $element) { $elemType = $element->getElementType(); /* -- Take the leap, and just work with all custom elementtypes instead of checking a whitelist if ($elemType == ElementType::Entry || $elemType == "Commerce_Product" || $elemType == "SuperCal_Event" || $elemType == "Marketplace_Product" || $elemType == ElementType::Category) */ if ((isset($element->content) && is_object($element->content)) && (isset($element->content->attributes)) && (is_object($element->content->attributes) || is_array($element->content->attributes))) { $attributes = $element->content->attributes; foreach ($attributes as $key => $value) { if (is_object($value) && property_exists($value, "elementType")) { if ($value->elementType == "Seomatic_FieldMeta") { if ($this->isFieldHandleInEntry($element, $key)) { $entryMeta = $value; $this->lastElement = $element; /* -- If this is a Commerce Product, fill in some additional info */ if (($elemType == "Commerce_Product" || is_a($element, "Commerce\\Base\\Purchasable")) && craft()->config->get("renderCommerceProductJSONLD", "seomatic")) { if ($elemType == "Commerce_Product") { $commerceSettings = craft()->commerce_settings->getSettings(); $variants = $element->getVariants(); $commerceVariants = array(); foreach ($variants as $variant) { if ($variant->getIsAvailable()) { $availability = "http://schema.org/InStock"; } else { $availability = "http://schema.org/OutOfStock"; } $commerceVariant = array( 'seoProductDescription' => $variant->getDescription() . ' - ' . $element->title, 'seoProductPrice' => number_format($variant->getPrice(), 2, '.', ''), 'seoProductCurrency' => craft()->commerce_paymentCurrencies->getPrimaryPaymentCurrency(), 'seoProductSku' => $variant->getSku(), 'seoProductAvailability' => $availability, ); $commerceVariants[] = $commerceVariant; } } else { if ($element->getIsAvailable()) { $availability = "http://schema.org/InStock"; } else { $availability = "http://schema.org/OutOfStock"; } $commerceVariant = array( 'seoProductDescription' => $element->getDescription() . ' - ' . $element->title, 'seoProductPrice' => number_format($element->getPrice(), 2, '.', ''), 'seoProductCurrency' => craft()->commerce_paymentCurrencies->getPrimaryPaymentCurrency(), 'seoProductSku' => $element->getSku(), 'seoProductAvailability' => $availability, ); $commerceVariants[] = $commerceVariant; } if (!empty($commerceVariants)) $entryMeta['seoCommerceVariants'] = $commerceVariants; } } /* -- Swap in any SEOmatic fields that are pulling from other entry fields */ } } } } } return $entryMeta; } /* -- getMetaFromElement */ /* -------------------------------------------------------------------------------- Is a given fieldHandle in a entry? -------------------------------------------------------------------------------- */ public function isFieldHandleInEntry($entryElement = null, $fieldHandle="") { $result = false; if (!empty($entryElement) && is_object($entryElement)) { $fieldLayoutFields = $entryElement->fieldLayout->getFields(); foreach ($fieldLayoutFields as $fieldLayoutField) { $field = $fieldLayoutField->field; if ($field->handle == $fieldHandle) { $result = true; return $result; } } } return $result; } /* -- isFieldHandleInEntry */ /* -------------------------------------------------------------------------------- Extract text from a generix field, do different things based on the classHandle -------------------------------------------------------------------------------- */ public function getTextFromEntryField($srcField) { $result = ""; if (isset($srcField->elementType)) { switch ($srcField->elementType->classHandle) { case "Neo": case "Neo_Block": $result= $this->extractTextFromNeo($srcField); break; case ElementType::MatrixBlock: $result= $this->extractTextFromMatrix($srcField); break; case ElementType::Tag: $result= $this->extractTextFromTags($srcField); break; default: $result = strip_tags($srcField); break; } } else $result = strip_tags($srcField); return $result; } /* -------------------------------------------------------------------------------- Extract text from a tags field -------------------------------------------------------------------------------- */ public function extractTextFromTags($tags) { $result = ""; foreach($tags as $tag) { $result .= $tag->title . ", "; } $result = rtrim($result, ", "); return $result; } /* -------------------------------------------------------------------------------- Extract text from a matrix field -------------------------------------------------------------------------------- */ public function extractTextFromMatrix($matrixBlocks, $fieldHandle="") { $result = ""; foreach ($matrixBlocks as $block) { $matrixBlockTypeModel = $block->getType(); $fields = $matrixBlockTypeModel->getFields(); foreach ($fields as $field) { if ($field->type == "PlainText" || $field->type == "RichText" || $field->type == "RedactorI" ) { if (($field->handle == $fieldHandle) || ($fieldHandle == "")) $result .= strip_tags($block[$field->handle]) . " "; } } } return $result; } /* -- extractTextFromMatrix */ /* -------------------------------------------------------------------------------- Extract text from a Neo field -------------------------------------------------------------------------------- */ public function extractTextFromNeo($neoBlocks, $fieldHandle="") { $result = ""; foreach ($neoBlocks as $block) { $neoBlockTypeModel = $block->getType(); $fieldLayout = craft()->fields->getLayoutById($neoBlockTypeModel->fieldLayoutId); $fieldLayoutFields = $fieldLayout->getFields(); foreach ($fieldLayoutFields as $fieldLayoutField) { $field = $fieldLayoutField->field; if ($field->type == "PlainText" || $field->type == "RichText" || $field->type == "RedactorI" ) { if (($field->handle == $fieldHandle) || ($fieldHandle == "")) $result .= strip_tags($block[$field->handle]) . " "; } } } return $result; } /* -- extractTextFromNeo */ /* -------------------------------------------------------------------------------- Set the entry-level meta -------------------------------------------------------------------------------- */ public function setEntryMeta($entryMeta, $entryMetaUrl) { $meta = null; /* -- If $entryMeta was passed in, merge it with our array */ if ($entryMeta) { $meta = array(); $meta['seoMainEntityCategory'] = $entryMeta->seoMainEntityCategory; $meta['seoMainEntityOfPage'] = $entryMeta->seoMainEntityOfPage; $meta['seoTitle'] = $entryMeta->seoTitle; $meta['seoDescription'] = $entryMeta->seoDescription; $meta['seoKeywords'] = $entryMeta->seoKeywords; $meta['seoImageTransform'] = $entryMeta->seoImageTransform; $meta['seoFacebookImageTransform'] = $entryMeta->seoFacebookImageTransform; $meta['seoTwitterImageTransform'] = $entryMeta->seoTwitterImageTransform; if (isset($entryMeta->seoImageId[0])) $meta['seoImageId'] = $entryMeta->seoImageId; else $meta['seoImageId'] = null; if (isset($entryMeta->seoTwitterImageId[0])) $meta['seoTwitterImageId'] = $entryMeta->seoTwitterImageId; else $meta['seoTwitterImageId'] = $meta['seoImageId']; if (isset($entryMeta->seoFacebookImageId[0])) $meta['seoFacebookImageId'] = $entryMeta->seoFacebookImageId; else $meta['seoFacebookImageId'] = $meta['seoImageId']; $meta['canonicalUrl'] = $this->getFullyQualifiedUrl($entryMetaUrl); if (!empty($entryMeta->canonicalUrlOverride)) { $meta['canonicalUrl'] = $this->getFullyQualifiedUrl($entryMeta->canonicalUrlOverride); } $meta['twitterCardType'] = $entryMeta->twitterCardType; if (!$meta['twitterCardType']) $meta['twitterCardType'] = 'summary'; $meta['openGraphType'] = $entryMeta->openGraphType; if (!$meta['openGraphType']) $meta['openGraphType'] = 'website'; if (isset($entryMeta->robots)) $meta['robots'] = $entryMeta->robots; else $meta['robots'] = ''; /* -- Swap in the seoImageId for the actual asset */ if (isset($entryMeta['seoImageId'])) { $image = craft()->assets->getFileById($entryMeta['seoImageId']); if ($image) { $imgUrl = $image->getUrl($entryMeta['seoImageTransform']); if (!$imgUrl) $imgUrl = $image->url; $meta['seoImage'] = $this->getFullyQualifiedUrl($imgUrl); } else $meta['seoImage'] = ''; /* -- Keep this around for transforms and sizing info unset($meta['seoImageId']); */ } else $meta['seoImage'] = ''; /* -- For Craft Commerce Products */ if (isset($entryMeta->seoCommerceVariants) && !empty($entryMeta->seoCommerceVariants)) { $this->entrySeoCommerceVariants = $entryMeta->seoCommerceVariants; } $meta = array_filter($meta); if (!isset($meta['seoMainEntityOfPage'])) $meta['seoMainEntityOfPage'] =""; } $this->entryMeta = $meta; return $meta; } /* -- setEntryMeta */ /* -------------------------------------------------------------------------------- Set the Twitter Cards and Open Graph arrays for the meta -------------------------------------------------------------------------------- */ public function setSocialForMeta(&$meta, $siteMeta, $social, $helper, $identity, $locale) { if ($meta) { /* -- Set up the title prefix and suffix */ $titlePrefix = ""; /* -- We now do this in sanitizeMetaVars() so this can be changed in Twig just like the seoTitle if ($siteMeta['siteSeoTitlePlacement'] == "before") $titlePrefix = $siteMeta['siteSeoName'] . " " . $siteMeta['siteSeoTitleSeparator'] . " "; */ $titleSuffix = ""; /* -- We now do this in sanitizeMetaVars() so this can be changed in Twig just like the seoTitle if ($siteMeta['siteSeoTitlePlacement'] == "after") $titleSuffix = " " . $siteMeta['siteSeoTitleSeparator'] . " " . $siteMeta['siteSeoName']; */ /* -- Add in the Twitter Card settings to the meta */ if ($social['twitterHandle']) { $twitterCard = array(); $twitterCard['card'] = $meta['twitterCardType']; $twitterCard['site'] = "@" . ltrim($social['twitterHandle'], '@'); switch ($twitterCard['card']) { case 'summary_large_image': $twitterCard['creator'] = "@" . ltrim($social['twitterHandle'], '@'); break; default: $twitterCard['creator'] = ""; break; } $twitterCard['title'] = $titlePrefix . $meta['seoTitle'] . $titleSuffix; $twitterCard['description'] = $meta['seoDescription']; /* -- Swap in the seoImageId for the actual asset */ $imgId = 0; if (isset($meta['seoImageId'])) $imgId = $meta['seoImageId']; if (isset($meta['seoTwitterImageId']) && $meta['seoTwitterImageId'] != 0) $imgId = $meta['seoTwitterImageId']; if ($imgId) { $image = craft()->assets->getFileById($imgId); if ($image) { $imgUrl = $image->getUrl($meta['seoTwitterImageTransform']); if (!$imgUrl) $imgUrl = $image->url; $twitterCard['image'] = $this->getFullyQualifiedUrl($imgUrl); } else $twitterCard['image'] = ''; } else $twitterCard['image'] = ''; $meta['twitter'] = $twitterCard; } /* -- Add in the Facebook Open Graph settings to the meta */ $openGraph = array(); $openGraph['type'] = $meta['openGraphType']; /* -- Kludges to keep Facebook happy */ if ($locale == "en") $openGraph['locale'] = 'en_US'; else $openGraph['locale'] = substr($locale, 0, 5); if (strlen($openGraph['locale']) == 2) $openGraph['locale'] = $openGraph['locale'] . "_" . strtoupper($openGraph['locale']); $openGraph['url'] = $meta['canonicalUrl']; $openGraph['title'] = $titlePrefix . $meta['seoTitle'] . $titleSuffix; $openGraph['description'] = $meta['seoDescription']; /* -- Swap in the seoImageId for the actual asset */ $imgId = 0; if (isset($meta['seoImageId'])) $imgId = $meta['seoImageId']; if (isset($meta['seoFacebookImageId']) && $meta['seoFacebookImageId'] != 0) $imgId = $meta['seoFacebookImageId']; if ($imgId) { $image = craft()->assets->getFileById($imgId); if ($image) { $imgUrl = $image->getUrl($meta['seoFacebookImageTransform']); if (!$imgUrl) { $imgUrl = $image->url; $openGraph['image'] = $this->getFullyQualifiedUrl($imgUrl); $openGraph['image:type'] = $image->getMimeType(); $openGraph['image:width'] = $image->getWidth(); $openGraph['image:height'] = $image->getHeight(); } else { $openGraph['image'] = $this->getFullyQualifiedUrl($imgUrl); $openGraph['image:type'] = $image->getMimeType(); $openGraph['image:width'] = $image->getWidth($meta['seoFacebookImageTransform']); $openGraph['image:height'] = $image->getHeight($meta['seoFacebookImageTransform']); } } else $openGraph['image'] = ''; } else $openGraph['image'] = ''; $openGraph['site_name'] = $siteMeta['siteSeoName']; $sameAs = array(); array_push($sameAs, $helper['twitterUrl']); array_push($sameAs, $helper['facebookUrl']); array_push($sameAs, $helper['googlePlusUrl']); array_push($sameAs, $helper['linkedInUrl']); array_push($sameAs, $helper['youtubeUrl']); array_push($sameAs, $helper['youtubeChannelUrl']); array_push($sameAs, $helper['instagramUrl']); array_push($sameAs, $helper['pinterestUrl']); array_push($sameAs, $helper['githubUrl']); array_push($sameAs, $helper['vimeoUrl']); array_push($sameAs, $helper['wikipediaUrl']); $sameAs = array_filter($sameAs); $sameAs = array_values($sameAs); if (!empty($sameAs)) $openGraph['see_also'] = $sameAs; $meta['og'] = $openGraph; /* -- Handle Open Graph articles */ if ($openGraph['type'] == "article") { $openGraphArticle = array(); $openGraphArticle['author'] = $helper['facebookUrl']; $openGraphArticle['publisher'] = $helper['facebookUrl']; if ($meta['seoKeywords']) $openGraphArticle['tag'] = array_map('trim', explode(',', $meta['seoKeywords'])); /* -- If an element was injected into the current template, scrape it for attribuates */ if ($this->lastElement) { $elemType = $this->lastElement->getElementType(); switch ($elemType) { case ElementType::Entry: { if ($this->lastElement->dateUpdated) $openGraphArticle['modified_time'] = $this->lastElement->dateUpdated->iso8601(); if ($this->lastElement->postDate) $openGraphArticle['published_time'] = $this->lastElement->postDate->iso8601(); } break; case "Commerce_Product": { if ($this->lastElement->dateUpdated) $openGraphArticle['modified_time'] = $this->lastElement->dateUpdated->iso8601(); if ($this->lastElement->postDate) $openGraphArticle['published_time'] = $this->lastElement->postDate->iso8601(); } break; case ElementType::Category: { if ($this->lastElement->dateUpdated) $openGraphArticle['modified_time'] = $this->lastElement->dateUpdated->iso8601(); if ($this->lastElement->dateCreated) $openGraphArticle['published_time'] = $this->lastElement->dateCreated->iso8601(); } break; } } $meta['article'] = $openGraphArticle; } } } /* -- setSocialForMeta*/ /* -------------------------------------------------------------------------------- Get the seomatic globals -------------------------------------------------------------------------------- */ public function getGlobals($forTemplate="", $locale) { if ($this->renderedMetaVars) return $this->renderedMetaVars; if (!$locale) $locale = craft()->language; /* -- Load in our globals */ $meta = $this->getMeta($forTemplate); $siteMeta = $this->getSiteMeta($locale); $identity = $this->getIdentity($locale); $social = $this->getSocial($locale); $creator = $this->getCreator($locale); /* -- Get a full qualified URL for the current request */ $requestUrl = UrlHelper::stripQueryString(craft()->request->url); $meta['canonicalUrl'] = $this->getFullyQualifiedUrl($requestUrl); /* -- Merge the meta with the global meta */ $globalMeta['seoTitle'] = $siteMeta['siteSeoTitle']; $globalMeta['seoDescription'] = $siteMeta['siteSeoDescription']; $globalMeta['seoKeywords'] = $siteMeta['siteSeoKeywords']; $globalMeta['seoImage'] = $this->getFullyQualifiedUrl($siteMeta['siteSeoImage']); $globalMeta['seoImageId'] = $siteMeta['siteSeoImageId']; $globalMeta['seoTwitterImageId'] = $siteMeta['siteSeoTwitterImageId']; $globalMeta['seoFacebookImageId'] = $siteMeta['siteSeoFacebookImageId']; $globalMeta['seoImageTransform'] = $siteMeta['siteSeoImageTransform']; $globalMeta['seoFacebookImageTransform'] = $siteMeta['siteSeoFacebookImageTransform']; $globalMeta['seoTwitterImageTransform'] = $siteMeta['siteSeoTwitterImageTransform']; $globalMeta['twitterCardType'] = $siteMeta['siteTwitterCardType']; $globalMeta['openGraphType'] = $siteMeta['siteOpenGraphType']; $globalMeta['robots'] = $siteMeta['siteRobots']; $meta = array_merge($globalMeta, $meta); /* -- Merge with the entry meta, if any */ if ($this->entryMeta) $meta = array_merge($meta, $this->entryMeta); /* -- If this is a 404, set the canonicalUrl to nothing */ if (function_exists('http_response_code')) { if (http_response_code() == 404) { $meta['canonicalUrl'] = ""; } } /* -- Merge with the global override config settings */ $globalMetaOverride = craft()->config->get("globalMetaOverride", "seomatic"); if (!empty($globalMetaOverride)) { $globalMetaOverride = array_filter($globalMetaOverride); $meta = array_merge($meta, $globalMetaOverride); } /* -- Add the helper vars */ $helper = array(); $this->addSocialHelpers($helper, $social, $identity); $this->addIdentityHelpers($helper, $identity); $this->addCreatorHelpers($helper, $creator); $this->setSocialForMeta($meta, $siteMeta, $social, $helper, $identity, $locale); /* -- Fill in the breadcrumbs */ $meta['breadcrumbs'] = $this->getDefaultBreadcrumbs($meta); /* -- Swap in our JSON-LD objects */ $identity = $this->getIdentityJSONLD($identity, $helper, $locale); $creator = $this->getCreatorJSONLD($creator, $helper, $locale); /* -- Handle the Main Entity of Page, if set */ $seomaticMainEntityOfPage = ""; $seomaticMainEntityOfPage = $this->getMainEntityOfPageJSONLD($meta, $identity, $locale, true); /* -- Special-case for Craft Commerce products */ if ($this->entryMeta && isset($this->entrySeoCommerceVariants) && !empty($this->entrySeoCommerceVariants)) $seomaticMainEntityOfPage = $this->getProductJSONLD($meta, $identity, $locale, true); /* -- Get rid of variables we don't want to expose */ unset($siteMeta['siteSeoImageId']); unset($siteMeta['siteSeoTwitterImageId']); unset($siteMeta['siteSeoFacebookImageId']); unset($siteMeta['siteTwitterCardType']); unset($siteMeta['siteOpenGraphType']); unset($siteMeta['siteRobotsTxt']); unset($siteMeta['siteSeoImageTransform']); unset($siteMeta['siteSeoFacebookImageTransform']); unset($siteMeta['siteSeoTwitterImageTransform']); unset($meta['seoMainEntityCategory']); unset($meta['seoMainEntityOfPage']); unset($meta['twitterCardType']); unset($meta['openGraphType']); unset($meta['seoImageId']); unset($meta['seoTwitterImageId']); unset($meta['seoFacebookImageId']); unset($meta['seoImageTransform']); unset($meta['seoFacebookImageTransform']); unset($meta['seoTwitterImageTransform']); /* -- Set some useful runtime variables, too */ $runtimeVars = array( 'seomaticTemplatePath' => '', ); /* -- Return everything is an array of arrays */ $result = array('seomaticMeta' => $meta, 'seomaticHelper' => $helper, 'seomaticSiteMeta' => $siteMeta, 'seomaticSocial' => $social, 'seomaticIdentity' => $identity, 'seomaticCreator' => $creator, ); /* -- Fill in the main entity of the page */ if ($seomaticMainEntityOfPage) $result['seomaticMainEntityOfPage'] = $seomaticMainEntityOfPage; /* -- Return our global variables */ $result = array_merge($result, $runtimeVars); return $result; } /* -- getGlobals */ /* -------------------------------------------------------------------------------- Get the default breadcrumbs. -------------------------------------------------------------------------------- */ public function getDefaultBreadcrumbs($meta) { $result = array(); $element = null; $element = craft()->elements->getElementByUri("__home__", craft()->language, true); if ($element) { $result[$element->title] = $this->getFullyQualifiedUrl($element->url); } else { $homeName = craft()->config->get("breadcrumbsHomeName", "seomatic"); $result[$homeName] = $this->getFullyQualifiedUrl(craft()->getSiteUrl()); } /* -- Build up the segments, and look for elements that match */ $uri = ""; $segments = craft()->request->getSegments(); if ($this->lastElement && $element) { if ($this->lastElement->uri != "__home__" && $element->uri) { $path = parse_url($this->lastElement->uri, PHP_URL_PATH); $path = trim($path, "/"); $segments = explode("/", $path); } } /* -- Parse through the segments looking for elements that match */ foreach ($segments as $segment) { $uri .= $segment; $element = craft()->elements->getElementByUri($uri, craft()->language, true); if ($element && $element->uri) { $result[$element->title] = $this->getFullyQualifiedUrl($element->uri); } $uri .= "/"; } return $result; } /* -- getDefaultBreadcrumbs */ /* -------------------------------------------------------------------------------- Get the Settings record We do it this way so that there is only one DB query to load in all of the SEOmatic settings. Originally there were 4 separate models & 4 DB queries. -------------------------------------------------------------------------------- */ public function getSettings($locale) { /* -- Cache it in our class; no need to fetch it more than once */ if (isset($this->cachedSettings[$locale])) { return $this->cachedSettings[$locale]; } /* -- There's only one Seomatic_SettingsRecord per locale */ $settings = Seomatic_SettingsRecord::model()->findByAttributes(array( 'locale' => $locale, )); if (!$settings) { $this->saveDefaultSettings($locale); $settings = Seomatic_SettingsRecord::model()->findByAttributes(array( 'locale' => $locale, )); } $result = $settings->attributes; /* -- If our Humans.txt field is empty, fill it with the default template */ if ($result['genericCreatorHumansTxt'] == "") $result['genericCreatorHumansTxt'] = $settings->getDefaultHumans(); /* -- If our robots.txt field is empty, fill it with the default template */ if ($result['siteRobotsTxt'] == "") $result['siteRobotsTxt'] = $settings->getDefaultRobots(); /* -- If our siteSeoTitleSeparator & empty, fill it with the default template */ if ($result['siteSeoTitleSeparator'] == "") $result['siteSeoTitleSeparator'] = '|'; if ($result['siteSeoTitlePlacement'] == "") $result['siteSeoTitlePlacement'] = 'after'; /* -- If this Craft install is localized, and they are asking for a locale other than the main one, merge this local settings with their base language */ if (craft()->isLocalized()) { $baseLocales = craft()->i18n->getSiteLocales(); $baseLocale = $baseLocales[0]->id; if ($baseLocale != $locale) { /* -- Cache it in our class; no need to fetch it more than once */ if (isset($this->cachedSettings[$baseLocale])) { $baseResult = $this->cachedSettings[$baseLocale]; } else { /* -- There's only one Seomatic_SettingsRecord per locale */ $baseSettings = Seomatic_SettingsRecord::model()->findByAttributes(array( 'locale' => $baseLocale, )); if (!$baseSettings) { $this->saveDefaultSettings($baseLocale); $baseSettings = Seomatic_SettingsRecord::model()->findByAttributes(array( 'locale' => $baseLocale, )); } $baseResult = $baseSettings->attributes; } $result = array_filter($result); $result = array_merge($baseResult, $result); } } /* -- Get rid of properties we don't care about */ if ($result) { unset($result['id']); unset($result['dateCreated']); unset($result['dateUpdated']); unset($result['uid']); } $this->cachedSettings[$locale] = $result; return $result; } /* -- getSettings */ /* -------------------------------------------------------------------------------- Save the default Settings record -------------------------------------------------------------------------------- */ public function saveDefaultSettings($locale) { $model = new Seomatic_SettingsModel(); $model->locale = $locale; /* -- Append the locale.id if this isn't the main site language */ if ($locale != craft()->language) { $suffix = " (" . $locale . ")"; $model->siteSeoName .= $suffix; $model->siteSeoTitle .= $suffix; $model->siteSeoDescription .= $suffix; $model->siteSeoKeywords .= $suffix; } $record = new Seomatic_SettingsRecord(); $record->setAttributes($model->getAttributes(), false); if ($record->save()) { // update id on model (for new records) $model->setAttribute('id', $record->getAttribute('id')); return true; } else { $model->addErrors($record->getErrors()); return false; } } /* -- saveDefaultSettings */ /* -------------------------------------------------------------------------------- Get the siteMeta record We do it this way so that there is only one DB query to load in all of the SEOmatic settings. Originally there were 4 separate models & 4 DB queries. -------------------------------------------------------------------------------- */ public function getSiteMeta($locale) { /* -- Cache it in our class; no need to fetch it more than once */ if (isset($this->cachedSiteMeta[$locale])) return $this->cachedSiteMeta[$locale]; $settings = $this->getSettings($locale); $siteMeta = array(); $siteMeta['locale'] = $settings['locale']; $siteMeta['siteSeoName'] = $settings['siteSeoName']; $siteMeta['siteSeoTitle'] = $settings['siteSeoTitle']; $siteMeta['siteSeoTitleSeparator'] = $settings['siteSeoTitleSeparator']; $siteMeta['siteSeoTitlePlacement'] = $settings['siteSeoTitlePlacement']; $siteMeta['siteDevModeTitle'] = craft()->config->get("siteDevModeTitle", "seomatic"); $siteMeta['siteSeoDescription'] = $settings['siteSeoDescription']; $siteMeta['siteSeoKeywords'] = $settings['siteSeoKeywords']; $siteMeta['siteSeoImageId'] = $settings['siteSeoImageId']; $siteMeta['siteSeoTwitterImageId'] = $settings['siteSeoTwitterImageId']; $siteMeta['siteSeoFacebookImageId'] = $settings['siteSeoFacebookImageId']; $siteMeta['siteSeoImageTransform'] = $settings['siteSeoImageTransform']; $siteMeta['siteSeoFacebookImageTransform'] = $settings['siteSeoFacebookImageTransform']; $siteMeta['siteSeoTwitterImageTransform'] = $settings['siteSeoTwitterImageTransform']; if (isset($settings['siteRobots'])) $siteMeta['siteRobots'] = $settings['siteRobots']; else $siteMeta['siteRobots'] = ''; /* -- Handle the organization contact points */ $siteMeta['siteLinksSearchTargets'] = $settings['siteLinksSearchTargets']; $searchTargets = array(); if (isset($siteMeta['siteLinksSearchTargets']) && is_array($siteMeta['siteLinksSearchTargets'])) { foreach ($siteMeta['siteLinksSearchTargets'] as $searchTarget) { $searchTargets[] = $searchTarget; } } $searchTargets = array_filter($searchTargets); $siteMeta['siteLinksSearchTargets'] = $searchTargets; $siteMeta['siteLinksQueryInput'] = $settings['siteLinksQueryInput']; $siteMeta['siteTwitterCardType'] = $settings['siteTwitterCardType']; if (!$siteMeta['siteTwitterCardType']) $siteMeta['siteTwitterCardType'] = 'summary'; $siteMeta['siteOpenGraphType'] = $settings['siteOpenGraphType']; if (!$siteMeta['siteOpenGraphType']) $siteMeta['siteOpenGraphType'] = 'website'; /* -- Swap in the seoImageId for the actual asset */ if (isset($siteMeta['siteSeoImageId'])) { $image = craft()->assets->getFileById($siteMeta['siteSeoImageId']); if ($image) { $imgUrl = $image->getUrl($siteMeta['siteSeoImageTransform']); if (!$imgUrl) $imgUrl = $image->url; $siteMeta['siteSeoImage'] = $this->getFullyQualifiedUrl($imgUrl); } else $siteMeta['siteSeoImage'] = ''; } else $siteMeta['siteSeoImage'] = ''; $siteMeta['siteRobotsTxt'] = $settings['siteRobotsTxt']; $result = $siteMeta; $this->cachedSiteMeta[$locale] = $result; return $result; } /* -- getSiteMeta */ /* -------------------------------------------------------------------------------- Get the Identity record We do it this way so that there is only one DB query to load in all of the SEOmatic settings. Originally there were 4 separate models & 4 DB queries. -------------------------------------------------------------------------------- */ public function getIdentity($locale) { /* -- Cache it in our class; no need to fetch it more than once */ if (isset($this->cachedIdentity[$locale])) return $this->cachedIdentity[$locale]; $settings = $this->getSettings($locale); $identity = array(); $identity['locale'] = $settings['locale']; $identity['googleSiteVerification'] = $settings['googleSiteVerification']; $identity['bingSiteVerification'] = $settings['bingSiteVerification']; $identity['googleAnalyticsUID'] = $settings['googleAnalyticsUID']; $identity['googleTagManagerID'] = $settings['googleTagManagerID']; $identity['googleAnalyticsSendPageview'] = $settings['googleAnalyticsSendPageview']; $identity['googleAnalyticsAdvertising'] = $settings['googleAnalyticsAdvertising']; $identity['googleAnalyticsEcommerce'] = $settings['googleAnalyticsEcommerce']; $identity['googleAnalyticsEEcommerce'] = $settings['googleAnalyticsEEcommerce']; $identity['googleAnalyticsLinkAttribution'] = $settings['googleAnalyticsLinkAttribution']; $identity['googleAnalyticsLinker'] = $settings['googleAnalyticsLinker']; $identity['googleAnalyticsAnonymizeIp'] = $settings['googleAnalyticsAnonymizeIp']; $identity['siteOwnerType'] = ucfirst($settings['siteOwnerType']); $identity['siteOwnerSubType'] = $settings['siteOwnerSubType']; $identity['siteOwnerSpecificType'] = $settings['siteOwnerSpecificType']; /* -- Handle migrating the old way of storing siteOwnerType */ if (($identity['siteOwnerType'] != "Organization") && ($identity['siteOwnerType'] != "Person")) { $identity['siteOwnerSubType'] = $identity['siteOwnerType']; $identity['siteOwnerType'] = "Organization"; } if ($identity['siteOwnerSubType'] == "Restaurant") { $identity['siteOwnerSpecificType'] = $identity['siteOwnerSubType']; $identity['siteOwnerSubType'] = "LocalBusiness"; } $identity['genericOwnerName'] = $settings['genericOwnerName']; $identity['genericOwnerAlternateName'] = $settings['genericOwnerAlternateName']; $identity['genericOwnerDescription'] = $settings['genericOwnerDescription']; $identity['genericOwnerUrl'] = $settings['genericOwnerUrl']; $identity['genericOwnerImageId'] = $settings['genericOwnerImageId']; $image = craft()->assets->getFileById($settings['genericOwnerImageId']); if ($image) { $identity['genericOwnerImage'] = $this->getFullyQualifiedUrl($image->url); $identity['genericOwnerImageHeight'] = $image->getHeight(); $identity['genericOwnerImageWidth'] = $image->getWidth(); } else $identity['genericOwnerImage'] = ''; $identity['genericOwnerTelephone'] = $settings['genericOwnerTelephone']; $identity['genericOwnerEmail'] = $settings['genericOwnerEmail']; $identity['genericOwnerStreetAddress'] = $settings['genericOwnerStreetAddress']; $identity['genericOwnerAddressLocality'] = $settings['genericOwnerAddressLocality']; $identity['genericOwnerAddressRegion'] = $settings['genericOwnerAddressRegion']; $identity['genericOwnerPostalCode'] = $settings['genericOwnerPostalCode']; $identity['genericOwnerAddressCountry'] = $settings['genericOwnerAddressCountry']; $identity['genericOwnerGeoLatitude'] = $settings['genericOwnerGeoLatitude']; $identity['genericOwnerGeoLongitude'] = $settings['genericOwnerGeoLongitude']; $identity['organizationOwnerDuns'] = $settings['organizationOwnerDuns']; $identity['organizationOwnerFounder'] = $settings['organizationOwnerFounder']; $identity['organizationOwnerFoundingDate'] = $settings['organizationOwnerFoundingDate']; $identity['organizationOwnerFoundingLocation'] = $settings['organizationOwnerFoundingLocation']; $identity['organizationOwnerContactPoints'] = $settings['organizationOwnerContactPoints']; /* -- Handle the organization contact points */ $contactPoints = array(); if (isset($identity['organizationOwnerContactPoints']) && is_array($identity['organizationOwnerContactPoints'])) { foreach ($identity['organizationOwnerContactPoints'] as $contacts) { $spec = array( "type" => "ContactPoint", "telephone" => $contacts['telephone'], "contactType" => $contacts['contactType'], ); $contactPoints[] = $spec; } } $contactPoints = array_filter($contactPoints); $identity['contactPoint'] = $contactPoints; if (count($identity['contactPoint']) < 1) unset($identity['contactPoint']); $identity['personOwnerGender'] = $settings['personOwnerGender']; $identity['personOwnerBirthPlace'] = $settings['personOwnerBirthPlace']; $identity['localBusinessPriceRange'] = $settings['localBusinessPriceRange']; $identity['localBusinessOwnerOpeningHours'] = $settings['localBusinessOwnerOpeningHours']; /* -- Handle the opening hours specification */ $days = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"); $openingHours = array(); if (isset($identity['localBusinessOwnerOpeningHours']) && is_array($identity['localBusinessOwnerOpeningHours'])) { craft()->seomatic->convertTimes($identity['localBusinessOwnerOpeningHours']); $index = 0; foreach ($identity['localBusinessOwnerOpeningHours'] as $hours) { $openTime = ""; $closeTime = ""; if (isset($hours['open']) && $hours['open']) $openTime = $hours['open']->format('H:i:s', $hours['open']->getTimeZone()); if (isset($hours['close']) && $hours['close']) $closeTime = $hours['close']->format('H:i:s', $hours['close']->getTimeZone()); if ($openTime && $closeTime) { $spec = array( "type" => "OpeningHoursSpecification", "closes" => $closeTime, "dayOfWeek" => array($days[$index]), "opens" => $openTime, ); $openingHours[] = $spec; } $index++; } } $openingHours = array_filter($openingHours); $identity['openingHoursSpecification'] = $openingHours; if (count($identity['openingHoursSpecification']) <= 1) unset($identity['openingHoursSpecification']); $identity['corporationOwnerTickerSymbol'] = $settings['corporationOwnerTickerSymbol']; $identity['restaurantOwnerServesCuisine'] = $settings['restaurantOwnerServesCuisine']; $identity['restaurantOwnerMenuUrl'] = $this->getFullyQualifiedUrl($settings['restaurantOwnerMenuUrl']); $identity['restaurantOwnerReservationsUrl'] = $this->getFullyQualifiedUrl($settings['restaurantOwnerReservationsUrl']); $result = $identity; $this->cachedIdentity[$locale] = $result; return $result; } /* -- getIdentity */ /* -------------------------------------------------------------------------------- Get the Identity JSON-LD -------------------------------------------------------------------------------- */ public function getIdentityJSONLD($identity, $helper, $locale) { /* -- Cache it in our class; no need to fetch it more than once */ if (isset($this->cachedIdentityJSONLD[$locale])) return $this->cachedIdentityJSONLD[$locale]; $identityJSONLD = array(); /* -- Settings generic to all Identity types */ $identityJSONLD['type'] = ucfirst($identity['siteOwnerType']); if ($identity['siteOwnerSubType']) $identityJSONLD['type'] = $identity['siteOwnerSubType']; if ($identity['siteOwnerSpecificType']) $identityJSONLD['type'] = $identity['siteOwnerSpecificType']; $identityJSONLD['name'] = $identity['genericOwnerName']; $identityJSONLD['alternateName'] = $identity['genericOwnerAlternateName']; $identityJSONLD['description'] = $identity['genericOwnerDescription']; $identityJSONLD['url'] = $identity['genericOwnerUrl']; $sameAs = array(); array_push($sameAs, $helper['twitterUrl']); array_push($sameAs, $helper['facebookUrl']); array_push($sameAs, $helper['googlePlusUrl']); array_push($sameAs, $helper['linkedInUrl']); array_push($sameAs, $helper['youtubeUrl']); array_push($sameAs, $helper['youtubeChannelUrl']); array_push($sameAs, $helper['instagramUrl']); array_push($sameAs, $helper['pinterestUrl']); array_push($sameAs, $helper['githubUrl']); array_push($sameAs, $helper['vimeoUrl']); array_push($sameAs, $helper['wikipediaUrl']); $sameAs = array_filter($sameAs); $sameAs = array_values($sameAs); if (!empty($sameAs)) $identityJSONLD['sameAs'] = $sameAs; if ($identity['genericOwnerImage']) { $ownerImage = array( "type" => "ImageObject", "url" => $identity['genericOwnerImage'], "height" => $identity['genericOwnerImageHeight'], "width" => $identity['genericOwnerImageWidth'], ); } else $ownerImage = ""; if (isset($identity['genericOwnerImage'])) $identityJSONLD['image'] = $ownerImage; $identityJSONLD['telephone'] = $identity['genericOwnerTelephone']; $identityJSONLD['email'] = $identity['genericOwnerEmail']; $address = array( "type" => "PostalAddress", "streetAddress" => $identity['genericOwnerStreetAddress'], "addressLocality" => $identity['genericOwnerAddressLocality'], "addressRegion" => $identity['genericOwnerAddressRegion'], "postalCode" => $identity['genericOwnerPostalCode'], "addressCountry" => $identity['genericOwnerAddressCountry'] ); $address = array_filter($address); $identityJSONLD['address'] = $address; if (count($identityJSONLD['address']) == 1) unset($identityJSONLD['address']); /* -- Settings for all person Identity types */ if ($identity['siteOwnerType'] == "Person") { $identityJSONLD['gender'] = $identity['personOwnerGender']; $identityJSONLD['birthPlace'] = $identity['personOwnerBirthPlace']; } /* -- Settings for all organization Identity types */ if ($identity['siteOwnerType'] == "Organization") { if (isset($identity['genericOwnerImage'])) $identityJSONLD['logo'] = $ownerImage; $geo = array( "type" => "GeoCoordinates", "latitude" => $identity['genericOwnerGeoLatitude'], "longitude" => $identity['genericOwnerGeoLongitude'], ); $geo = array_filter($geo); $locImage = ""; if (isset($identity['genericOwnerImage'])) $locImage = $ownerImage; $location = array( "type" => "Place", "name" => $identity['genericOwnerName'], "alternateName" => $identity['genericOwnerAlternateName'], "description" => $identity['genericOwnerDescription'], "hasMap" => $helper['ownerMapUrl'], "telephone" => $identity['genericOwnerTelephone'], "image" => $locImage, "logo" => $locImage, "url" => $identity['genericOwnerUrl'], "sameAs" => $sameAs, "geo" => $geo, "address" => $address, ); $location = array_filter($location); $identityJSONLD['location'] = $location; if (count($identityJSONLD['location']['geo']) == 1) unset($identityJSONLD['location']['geo']); if (count($identityJSONLD['location']['address']) == 1) unset($identityJSONLD['location']['address']); if (count($identityJSONLD['location']) == 1) unset($identityJSONLD['location']); $identityJSONLD['duns'] = $identity['organizationOwnerDuns']; $identityJSONLD['founder'] = $identity['organizationOwnerFounder']; $identityJSONLD['foundingDate'] = $identity['organizationOwnerFoundingDate']; $identityJSONLD['foundingLocation'] = $identity['organizationOwnerFoundingLocation']; if (isset($identity['contactPoint'])) $identityJSONLD['contactPoint'] = $identity['contactPoint']; } /* -- Settings on a per-Identity sub-type basis */ switch ($identity['siteOwnerSubType']) { case 'Airline': break; case 'Corporation': $identityJSONLD['tickerSymbol'] = $identity['corporationOwnerTickerSymbol']; break; case 'EducationalOrganization': break; case 'GovernmentOrganization': break; case 'LocalBusiness': if (isset($identity['localBusinessPriceRange'])) $identityJSONLD['priceRange'] = $identity['localBusinessPriceRange']; if (isset($identity['openingHoursSpecification'])) { if (isset($identityJSONLD['location'])) $identityJSONLD['openingHoursSpecification'] = $identity['openingHoursSpecification']; if (isset($identityJSONLD['location'])) $identityJSONLD['location']['openingHoursSpecification'] = $identity['openingHoursSpecification']; } break; case 'NGO': break; case 'PerformingGroup': break; case 'SportsOrganization': break; } /* -- Settings on a per-Identity specific-type basis */ switch ($identity['siteOwnerSpecificType']) { case 'FoodEstablishment': case 'Bakery': case 'BarOrPub': case 'Brewery': case 'CafeOrCoffeeShop': case 'FastFoodRestaurant': case 'IceCreamShop': case 'Restaurant': case 'Winery': $identityJSONLD['servesCuisine'] = $identity['restaurantOwnerServesCuisine']; $identityJSONLD['menu'] = $identity['restaurantOwnerMenuUrl']; $identityJSONLD['acceptsReservations'] = $identity['restaurantOwnerReservationsUrl']; break; } $result = array_filter($identityJSONLD); $this->cachedIdentityJSONLD[$locale] = $result; return $result; } /* -- getIdentityJSONLD */ /* -------------------------------------------------------------------------------- Get the social record We do it this way so that there is only one DB query to load in all of the SEOmatic settings. Originally there were 4 separate models & 4 DB queries. -------------------------------------------------------------------------------- */ public function getSocial($locale) { /* -- Cache it in our class; no need to fetch it more than once */ if (isset($this->cachedSocial[$locale])) return $this->cachedSocial[$locale]; $settings = $this->getSettings($locale); $social = array(); $social['locale'] = $settings['locale']; $social['twitterHandle'] = $settings['twitterHandle']; $social['facebookHandle'] = $settings['facebookHandle']; $social['facebookProfileId'] = $settings['facebookProfileId']; $social['facebookAppId'] = $settings['facebookAppId']; $social['linkedInHandle'] = $settings['linkedInHandle']; $social['googlePlusHandle'] = $settings['googlePlusHandle']; $social['youtubeHandle'] = $settings['youtubeHandle']; $social['youtubeChannelHandle'] = $settings['youtubeChannelHandle']; $social['instagramHandle'] = $settings['instagramHandle']; $social['pinterestHandle'] = $settings['pinterestHandle']; $social['githubHandle'] = $settings['githubHandle']; $social['vimeoHandle'] = $settings['vimeoHandle']; $social['wikipediaUrl'] = $settings['wikipediaUrl']; $result = $social; $this->cachedSocial[$locale] = $result; return $result; } /* -- getSocial */ /* -------------------------------------------------------------------------------- Get the Creator record We do it this way so that there is only one DB query to load in all of the SEOmatic settings. Originally there were 4 separate models & 4 DB queries. -------------------------------------------------------------------------------- */ public function getCreator($locale) { /* -- Cache it in our class; no need to fetch it more than once */ if (isset($this->cachedCreator[$locale])) return $this->cachedCreator[$locale]; $settings = $this->getSettings($locale); $creator = array(); $creator['locale'] = $settings['locale']; $creator['siteCreatorType'] = ucfirst($settings['siteCreatorType']); $creator['siteCreatorSubType'] = ""; $creator['siteCreatorSpecificType'] = ""; /* -- Handle migrating the old way of storing siteCreatorType $creator['siteCreatorSubType'] = $settings['siteCreatorSubType']; $creator['siteCreatorSpecificType'] = $settings['siteCreatorSpecificType']; if (($creator['siteCreatorType'] != "Organization") && ($creator['siteCreatorType'] != "Person")) { $creator['siteCreatorSubType'] = $creator['siteCreatorType']; $creator['siteCreatorType'] = "Organization"; } if ($creator['siteCreatorSubType'] == "Restaurant") { $creator['siteCreatorSpecificType'] = $creator['siteCreatorSubType']; $creator['siteCreatorSubType'] = "LocalBusiness"; } */ $creator['genericCreatorName'] = $settings['genericCreatorName']; $creator['genericCreatorAlternateName'] = $settings['genericCreatorAlternateName']; $creator['genericCreatorDescription'] = $settings['genericCreatorDescription']; $creator['genericCreatorUrl'] = $settings['genericCreatorUrl']; $creator['genericCreatorImageId'] = $settings['genericCreatorImageId']; $image = craft()->assets->getFileById($settings['genericCreatorImageId']); if ($image) { $creator['genericCreatorImage'] = $this->getFullyQualifiedUrl($image->url); $creator['genericCreatorImageHeight'] = $image->getHeight(); $creator['genericCreatorImageWidth'] = $image->getWidth(); } else $creator['genericCreatorImage'] = ''; $creator['genericCreatorTelephone'] = $settings['genericCreatorTelephone']; $creator['genericCreatorEmail'] = $settings['genericCreatorEmail']; $creator['genericCreatorStreetAddress'] = $settings['genericCreatorStreetAddress']; $creator['genericCreatorAddressLocality'] = $settings['genericCreatorAddressLocality']; $creator['genericCreatorAddressRegion'] = $settings['genericCreatorAddressRegion']; $creator['genericCreatorPostalCode'] = $settings['genericCreatorPostalCode']; $creator['genericCreatorAddressCountry'] = $settings['genericCreatorAddressCountry']; $creator['genericCreatorGeoLatitude'] = $settings['genericCreatorGeoLatitude']; $creator['genericCreatorGeoLongitude'] = $settings['genericCreatorGeoLongitude']; $creator['organizationCreatorDuns'] = $settings['organizationCreatorDuns']; $creator['organizationCreatorFounder'] = $settings['organizationCreatorFounder']; $creator['organizationCreatorFoundingDate'] = $settings['organizationCreatorFoundingDate']; $creator['organizationCreatorFoundingLocation'] = $settings['organizationCreatorFoundingLocation']; $creator['organizationCreatorContactPoints'] = $settings['organizationCreatorContactPoints']; /* -- Handle the organization contact points */ $contactPoints = array(); if (isset($creator['organizationCreatorContactPoints']) && is_array($creator['organizationCreatorContactPoints'])) { foreach ($creator['organizationCreatorContactPoints'] as $contacts) { $spec = array( "type" => "ContactPoint", "telephone" => $contacts['telephone'], "contactType" => $contacts['contactType'], ); $contactPoints[] = $spec; } } $contactPoints = array_filter($contactPoints); $creator['contactPoint'] = $contactPoints; if (count($creator['contactPoint']) < 1) unset($creator['contactPoint']); $creator['personCreatorGender'] = $settings['personCreatorGender']; $creator['personCreatorBirthPlace'] = $settings['personCreatorBirthPlace']; $creator['corporationCreatorTickerSymbol'] = $settings['corporationCreatorTickerSymbol']; $identity['restaurantCreatorServesCuisine'] = $settings['restaurantCreatorServesCuisine']; $identity['restaurantCreatorMenuUrl'] = $this->getFullyQualifiedUrl($settings['restaurantCreatorMenuUrl']); $identity['restaurantCreatorReservationsUrl'] = $this->getFullyQualifiedUrl($settings['restaurantCreatorReservationsUrl']); $creator['genericCreatorHumansTxt'] = $settings['genericCreatorHumansTxt']; $result = $creator; $this->cachedCreator[$locale] = $result; return $result; } /* -- getCreator */ /* -------------------------------------------------------------------------------- Get the Creator JSON-LD -------------------------------------------------------------------------------- */ public function getCreatorJSONLD($creator, $helper, $locale) { /* -- Cache it in our class; no need to fetch it more than once */ if (isset($this->cachedCreatorJSONLD[$locale])) return $this->cachedCreatorJSONLD[$locale]; $creatorJSONLD = array(); /* -- Settings generic to all Creator types */ $creatorJSONLD['type'] = ucfirst($creator['siteCreatorType']); /* if ($creator['siteCreatorSubType']) $creatorJSONLD['type'] = $creator['siteCreatorSubType']; if ($creator['siteCreatorSpecificType']) $creatorJSONLD['type'] = $creator['siteCreatorSpecificType']; */ $creatorJSONLD['name'] = $creator['genericCreatorName']; $creatorJSONLD['alternateName'] = $creator['genericCreatorAlternateName']; $creatorJSONLD['description'] = $creator['genericCreatorDescription']; $creatorJSONLD['url'] = $creator['genericCreatorUrl']; if ($creator['genericCreatorImage']) { $creatorImage = array( "type" => "ImageObject", "url" => $creator['genericCreatorImage'], "height" => $creator['genericCreatorImageHeight'], "width" => $creator['genericCreatorImageWidth'], ); } else $creatorImage = ""; if (isset($creator['genericCreatorImage'])) $creatorJSONLD['image'] = $creatorImage; $creatorJSONLD['telephone'] = $creator['genericCreatorTelephone']; $creatorJSONLD['email'] = $creator['genericCreatorEmail']; $address = array( "type" => "PostalAddress", "streetAddress" => $creator['genericCreatorStreetAddress'], "addressLocality" => $creator['genericCreatorAddressLocality'], "addressRegion" => $creator['genericCreatorAddressRegion'], "postalCode" => $creator['genericCreatorPostalCode'], "addressCountry" => $creator['genericCreatorAddressCountry'] ); $address = array_filter($address); $creatorJSONLD['address'] = $address; if (count($creatorJSONLD['address']) == 1) unset($creatorJSONLD['address']); /* -- This needs to be an additional fieldtype if we implement it if ($creator['genericCreatorTelephone']) { $contactPoint = array( "type" => "ContactPoint", "telephone" => $creator['genericCreatorTelephone'], "contactType" => "Contact", ); $contactPoint = array_filter($contactPoint); $creatorJSONLD['contactPoint'] = array($contactPoint); } */ /* -- Settings for all person Creator types */ if ($creator['siteCreatorType'] == "Person") { $creatorJSONLD['gender'] = $creator['personCreatorGender']; $creatorJSONLD['birthPlace'] = $creator['personCreatorBirthPlace']; } /* -- Settings for all organization Creator types */ if ($creator['siteCreatorType'] == "Organization" || $creator['siteCreatorType'] == "Corporation") { if (isset($creator['genericCreatorImage'])) $creatorJSONLD['logo'] = $creatorImage; $geo = array( "type" => "GeoCoordinates", "latitude" => $creator['genericCreatorGeoLatitude'], "longitude" => $creator['genericCreatorGeoLongitude'], ); $geo = array_filter($geo); $locImage = ""; if (isset($identity['genericCreatorImage'])) $locImage = $creatorImage; $location = array( "type" => "Place", "name" => $creator['genericCreatorName'], "alternateName" => $creator['genericCreatorAlternateName'], "description" => $creator['genericCreatorDescription'], "hasMap" => $helper['creatorMapUrl'], "telephone" => $creator['genericCreatorTelephone'], "image" => $locImage, "logo" => $locImage, "url" => $creator['genericCreatorUrl'], "geo" => $geo, "address" => $address, ); $location = array_filter($location); $creatorJSONLD['location'] = $location; if (count($creatorJSONLD['location']['geo']) == 1) unset($creatorJSONLD['location']['geo']); if (count($creatorJSONLD['location']['address']) == 1) unset($creatorJSONLD['location']['address']); if (count($creatorJSONLD['location']) == 1) unset($creatorJSONLD['location']); $creatorJSONLD['duns'] = $creator['organizationCreatorDuns']; $creatorJSONLD['founder'] = $creator['organizationCreatorFounder']; $creatorJSONLD['foundingDate'] = $creator['organizationCreatorFoundingDate']; $creatorJSONLD['foundingLocation'] = $creator['organizationCreatorFoundingLocation']; if (isset($creator['contactPoint'])) $creatorJSONLD['contactPoint'] = $creator['contactPoint']; } /* -- Settings on a per-Creator sub-type basis */ switch ($creator['siteCreatorSubType']) { case 'Airline': break; case 'Corporation': $creatorJSONLD['tickerSymbol'] = $creator['corporationCreatorTickerSymbol']; break; case 'EducationalOrganization': break; case 'GovernmentOrganization': break; case 'LocalBusiness': break; case 'NGO': break; case 'PerformingGroup': break; case 'SportsOrganization': break; } /* -- Settings on a per-Creator specific-type basis */ switch ($creator['siteCreatorSpecificType']) { case 'FoodEstablishment': case 'Bakery': case 'BarOrPub': case 'Brewery': case 'CafeOrCoffeeShop': case 'FastFoodRestaurant': case 'IceCreamShop': case 'Restaurant': case 'Winery': $creatorJSONLD['servesCuisine'] = $creator['restaurantCreatorServesCuisine']; $creatorJSONLD['menu'] = $creator['restaurantCreatorMenuUrl']; $creatorJSONLD['acceptsReservations'] = $creator['restaurantCreatorReservationsUrl']; break; } $result = array_filter($creatorJSONLD); $this->cachedCreatorJSONLD[$locale] = $result; return $result; } /* -- getCreatorJSONLD */ /* -------------------------------------------------------------------------------- Get the Main Entity of Page JSON-LD -------------------------------------------------------------------------------- */ public function getMainEntityOfPageJSONLD($meta, $identity, $locale, $isMainEntityOfPage) { $mainEntityOfPageJSONLD = array(); if (isset($meta['seoMainEntityCategory']) && isset($meta['seoMainEntityOfPage'])) { $entityCategory = $meta['seoMainEntityCategory']; $entityType = $meta['seoMainEntityCategory']; if ($meta['seoMainEntityOfPage']) $entityType = $meta['seoMainEntityOfPage']; /* -- Cache it in our class; no need to fetch it more than once */ if ($isMainEntityOfPage) { if (isset($this->cachedMainEntityOfPageJSONLD[$locale])) return $this->cachedMainEntityOfPageJSONLD[$locale]; } $title = ""; if (isset($meta['seoTitle'])) $title = $meta['seoTitle']; $imageObject = $dateCreated = $dateModified = $datePublished = $copyrightYear = ""; if (isset($meta['seoImageId'])) { $image = craft()->assets->getFileById($meta['seoImageId']); if ($image) { if (isset($meta['seoImageTransform'])) $transform = $meta['seoImageTransform']; else $transform = ''; $imgUrl = $image->getUrl($transform); $imageObject = array( "type" => "ImageObject", "url" => $this->getFullyQualifiedUrl($imgUrl), "width" => $image->getWidth($transform), "height" => $image->getHeight($transform), ); } } /* -- If an element was injected into the current template, scrape it for attribuates */ if ($this->lastElement) { $elemType = $this->lastElement->getElementType(); switch ($elemType) { case ElementType::Entry: { if (!$isMainEntityOfPage) $title = $this->lastElement->title; if ($this->lastElement->dateCreated) $dateCreated = $this->lastElement->dateCreated->iso8601(); if ($this->lastElement->dateUpdated) $dateModified = $this->lastElement->dateUpdated->iso8601(); if ($this->lastElement->postDate) $datePublished = $this->lastElement->postDate->iso8601(); if ($this->lastElement->postDate) $copyrightYear = $this->lastElement->postDate->year(); } break; case "Commerce_Product": { if (!$isMainEntityOfPage) $title = $this->lastElement->title; if ($this->lastElement->dateCreated) $dateCreated = $this->lastElement->dateCreated->iso8601(); if ($this->lastElement->dateUpdated) $dateModified = $this->lastElement->dateUpdated->iso8601(); if ($this->lastElement->postDate) $datePublished = $this->lastElement->postDate->iso8601(); if ($this->lastElement->postDate) $copyrightYear = $this->lastElement->postDate->year(); } break; case ElementType::Category: { if (!$isMainEntityOfPage) $title = $this->lastElement->title; if ($this->lastElement->dateCreated) $dateCreated = $this->lastElement->dateCreated->iso8601(); if ($this->lastElement->dateUpdated) $dateModified = $this->lastElement->dateUpdated->iso8601(); if ($this->lastElement->dateCreated) $datePublished = $this->lastElement->dateCreated->iso8601(); if ($this->lastElement->dateCreated) $copyrightYear = $this->lastElement->dateCreated->year(); } break; } } /* -- Main Entity of Page common JSON-LD */ $mainEntityOfPageJSONLD['type'] = $entityType; $mainEntityOfPageJSONLD['name'] = $title; if (isset($meta['seoDescription'])) $mainEntityOfPageJSONLD['description'] = $meta['seoDescription']; $mainEntityOfPageJSONLD['image'] = $imageObject; if (isset($meta['canonicalUrl'])) { $mainEntityOfPageJSONLD['url'] = $meta['canonicalUrl']; if ($isMainEntityOfPage) $mainEntityOfPageJSONLD['mainEntityOfPage'] = $meta['canonicalUrl']; } /* -- Special-cased attributes */ switch ($entityCategory) { case "CreativeWork": { $mainEntityOfPageJSONLD['inLanguage'] = substr(craft()->language, 0, 5); $mainEntityOfPageJSONLD['headline'] = $title; if (isset($meta['seoKeywords'])) $mainEntityOfPageJSONLD['keywords'] = $meta['seoKeywords']; $mainEntityOfPageJSONLD['dateCreated'] = $dateCreated; $mainEntityOfPageJSONLD['dateModified'] = $dateModified; $mainEntityOfPageJSONLD['datePublished'] = $datePublished; $mainEntityOfPageJSONLD['copyrightYear'] = $copyrightYear; $mainEntityOfPageJSONLD['author'] = $identity; $mainEntityOfPageJSONLD['copyrightHolder'] = $identity; $mainEntityOfPageJSONLD['publisher'] = $identity; // There are a number of properties that Google apparently doesn't like for 'publisher' if ($mainEntityOfPageJSONLD['publisher']['type'] !== "Person") { $mainEntityOfPageJSONLD['publisher']['type'] = "Organization"; } unset($mainEntityOfPageJSONLD['publisher']['priceRange']); unset($mainEntityOfPageJSONLD['publisher']['tickerSymbol']); unset($mainEntityOfPageJSONLD['publisher']['openingHoursSpecification']); unset($mainEntityOfPageJSONLD['publisher']['servesCuisine']); unset($mainEntityOfPageJSONLD['publisher']['menu']); unset($mainEntityOfPageJSONLD['publisher']['acceptsReservations']); } break; case "Event": { } break; case "Product": { } break; } if ((!empty($meta['breadcrumbs'])) && ($entityType == "WebPage")) { $crumbsJSON = $this->getBreadcrumbsJSONLD($meta['breadcrumbs']); $mainEntityOfPageJSONLD['breadcrumb'] = $crumbsJSON; } $mainEntityOfPageJSONLD = array_filter($mainEntityOfPageJSONLD); if ($isMainEntityOfPage) { $this->cachedMainEntityOfPageJSONLD[$locale] = $mainEntityOfPageJSONLD; } } return $mainEntityOfPageJSONLD; } /* -- getMainEntityOfPageJSONLD */ /* -------------------------------------------------------------------------------- Get the Product JSON-LD -------------------------------------------------------------------------------- */ public function getProductJSONLD($meta, $identity, $locale) { /* -- Cache it in our class; no need to fetch it more than once */ if (isset($this->cachedProductJSONLD[$locale])) return $this->cachedProductJSONLD[$locale]; $productsArrayJSONLD = array(); foreach ($this->entrySeoCommerceVariants as $variant) { $productJSONLD = array(); /* -- Product JSON-LD */ $productJSONLD['type'] = "Product"; $productJSONLD['name'] = $variant['seoProductDescription']; $productJSONLD['description'] = $meta['seoDescription']; $productJSONLD['image'] = $meta['seoImage']; $productJSONLD['logo'] = $meta['seoImage']; $productJSONLD['url'] = $meta['canonicalUrl']; $productJSONLD['mainEntityOfPage'] = $meta['canonicalUrl']; $productJSONLD['sku'] = $variant['seoProductSku']; $offer = array( "type" => "Offer", "url" => $meta['canonicalUrl'], "price" => $variant['seoProductPrice'], "priceCurrency" => $variant['seoProductCurrency'], "offeredBy" => $identity, "seller" => $identity, "availability" => $variant['seoProductAvailability'], ); $offer = array_filter($offer); $productJSONLD['offers'] = $offer; $productsArrayJSONLD[] = array_filter($productJSONLD); } $this->cachedProductJSONLD[$locale] = $productsArrayJSONLD; return $productsArrayJSONLD; } /* -- getProductJSONLD */ /* -------------------------------------------------------------------------------- Get the Breadcrumbs JSON-LD -------------------------------------------------------------------------------- */ public function getBreadcrumbsJSONLD($crumbs) { $crumbsArrayJSONLD = array(); $crumbsArrayJSONLD['type'] = "BreadcrumbList"; $crumbsArrayJSONLD['itemListElement'] = array(); $crumbCounter = 1; foreach ($crumbs as $key => $value) { $itemListJSONLD = array(); /* -- Settings generic to all Creator types */ $itemListJSONLD['type'] = "ListItem"; $itemListJSONLD['position'] = $crumbCounter; $itemListJSONLD['item'] = array( "@id" => $value, "name" => $key, ); array_push($crumbsArrayJSONLD['itemListElement'], array_filter($itemListJSONLD)); $crumbCounter++; } return $crumbsArrayJSONLD; } /* -- getBreadcrumbsJSONLD */ /* -------------------------------------------------------------------------------- Get the WebSite JSON-LD -------------------------------------------------------------------------------- */ public function getWebSiteJSONLD($metaVars, $locale) { /* -- Cache it in our class; no need to fetch it more than once */ if (isset($this->cachedWebSiteJSONLD[$locale])) return $this->cachedWebSiteJSONLD[$locale]; $webSiteJSONLD = array(); /* -- Settings generic to all Creator types */ $webSiteJSONLD['type'] = "WebSite"; $webSiteJSONLD['name'] = $metaVars['seomaticSiteMeta']['siteSeoName']; $webSiteJSONLD['description'] = $metaVars['seomaticSiteMeta']['siteSeoDescription']; $webSiteJSONLD['url'] = $this->getFullyQualifiedUrl(craft()->getSiteUrl()); if (isset($metaVars['seomaticSiteMeta']['siteSeoImage'])) $webSiteJSONLD['image'] = $metaVars['seomaticSiteMeta']['siteSeoImage']; if (!empty($metaVars['seomaticSiteMeta']['siteLinksSearchTargets']) && $metaVars['seomaticSiteMeta']['siteLinksQueryInput']) { $targets = array(); foreach ($metaVars['seomaticSiteMeta']['siteLinksSearchTargets'] as $target) { $targets[] = $target['searchtargets']; } $potentialAction = array ( "type" => "SearchAction", "target" => $targets, "query-input" => "required name=" . $metaVars['seomaticSiteMeta']['siteLinksQueryInput'], ); $webSiteJSONLD['potentialAction'] = $potentialAction; } $sameAs = array(); array_push($sameAs, $metaVars['seomaticHelper']['twitterUrl']); array_push($sameAs, $metaVars['seomaticHelper']['facebookUrl']); array_push($sameAs, $metaVars['seomaticHelper']['googlePlusUrl']); array_push($sameAs, $metaVars['seomaticHelper']['linkedInUrl']); array_push($sameAs, $metaVars['seomaticHelper']['youtubeUrl']); array_push($sameAs, $metaVars['seomaticHelper']['youtubeChannelUrl']); array_push($sameAs, $metaVars['seomaticHelper']['instagramUrl']); array_push($sameAs, $metaVars['seomaticHelper']['pinterestUrl']); array_push($sameAs, $metaVars['seomaticHelper']['githubUrl']); array_push($sameAs, $metaVars['seomaticHelper']['vimeoUrl']); $sameAs = array_filter($sameAs); $sameAs = array_values($sameAs); if (!empty($sameAs)) $webSiteJSONLD['sameAs'] = $sameAs; $webSiteJSONLD['copyrightHolder'] = $metaVars['seomaticIdentity']; $webSiteJSONLD['author'] = $metaVars['seomaticIdentity']; $webSiteJSONLD['creator'] = $metaVars['seomaticCreator']; $result = array_filter($webSiteJSONLD); $this->cachedWebSiteJSONLD[$locale] = $result; return $result; } /* -- getWebSiteJSONLD */ /* -------------------------------------------------------------------------------- Parse the passed in $templateStr as an object template, with $element passed in -------------------------------------------------------------------------------- */ function parseAsTemplate($templateStr, $element) { $result = $templateStr; $result = craft()->config->parseEnvironmentString($result); try { $result = craft()->templates->renderObjectTemplate($result, $element); } catch (\Exception $e) { SeomaticPlugin::log("Template error in the `" . $templateStr . "` template.", LogLevel::Info, true); $result = $templateStr; } return $result; } /* -- parseAsTemplate */ /* -------------------------------------------------------------------------------- Get the meta record -------------------------------------------------------------------------------- */ public function getMeta($forTemplate="") { $result = array(); if ($forTemplate) { $element = craft()->urlManager->getMatchedElement(); $forTemplate = craft()->db->quoteValue($forTemplate); $whereQuery = '`metaPath` = ' . $forTemplate; $metaRecord = Seomatic_MetaRecord::model()->find($whereQuery); if ($metaRecord) { $meta['seoTitle'] = $this->parseAsTemplate($metaRecord->seoTitle, $element); $meta['seoDescription'] = $this->parseAsTemplate($metaRecord->seoDescription, $element); $meta['seoKeywords'] = $this->parseAsTemplate($metaRecord->seoKeywords, $element); $meta['seoMainEntityCategory'] = $metaRecord->seoMainEntityCategory; $meta['seoMainEntityOfPage'] = $metaRecord->seoMainEntityOfPage; $meta['seoImageTransform'] = $metaRecord->seoImageTransform; $meta['seoFacebookImageTransform'] = $metaRecord->seoFacebookImageTransform; $meta['seoTwitterImageTransform'] = $metaRecord->seoTwitterImageTransform; if (isset($metaRecord->seoImageId)) $meta['seoImageId'] = $metaRecord->seoImageId; else $meta['seoImageId'] = null; if (isset($metaRecord->seoTwitterImageId)) $meta['seoTwitterImageId'] = $metaRecord->seoTwitterImageId; else $meta['seoTwitterImageId'] = $meta['seoImageId']; if (isset($metaRecord->seoFacebookImageId)) $meta['seoFacebookImageId'] = $metaRecord->seoFacebookImageId; else $meta['seoFacebookImageId'] = $meta['seoImageId']; $meta['twitterCardType'] = $metaRecord->twitterCardType; if (!$meta['twitterCardType']) $meta['twitterCardType'] = 'summary'; $meta['openGraphType'] = $metaRecord->openGraphType; if (!$meta['openGraphType']) $meta['openGraphType'] = 'website'; if (isset($metaRecord->robots)) $meta['robots'] = $metaRecord->robots; else $meta['robots'] = ''; /* -- Swap in the seoImageId for the actual asset */ if (isset($meta['seoImageId'])) { $image = craft()->assets->getFileById($meta['seoImageId']); if ($image) { $imgUrl = ""; if (isset($meta['seoImageTransform'])) $imgUrl = $image->getUrl($meta['seoImageTransform']); if (!$imgUrl) $imgUrl = $image->url; $meta['seoImage'] = $this->getFullyQualifiedUrl($imgUrl); } else $meta['seoImage'] = ''; /* -- Keep this around for transforms, height, width, etc. unset($meta['seoImageId']); */ } else $meta['seoImage'] = ''; $meta = array_filter($meta); $result = array_merge($result, $meta); } } return $result; } /* -- getMeta */ /* -------------------------------------------------------------------------------- Save the meta element & record from the model -------------------------------------------------------------------------------- */ public function saveMeta(&$model) { $isNewMeta = !$model->id; if (!$isNewMeta) { $record = Seomatic_MetaRecord::model()->findById($model->id); /* $record = Seomatic_SettingsRecord::model()->findByAttributes(array( 'locale' => $locale, 'elementId' => $model->elementId, )); */ if (!$record) { throw new Exception(Craft::t('No meta exists with the ID “{id}”', array('id' => $model->id))); } else { /* -- If the locale of the saved record is different than the locale of our model, create a new record if ($record->locale != $model->locale) { $record = new Seomatic_MetaRecord(); $model->id = null; $isNewMeta = true; } */ } } else { $record = new Seomatic_MetaRecord(); } $record->setAttributes($model->getAttributes(), false); $assetId = (!empty($model->seoImageId) ? $model->seoImageId[0] : null); $record->seoImageId = $assetId; $assetId = (!empty($model->seoTwitterImageId) ? $model->seoTwitterImageId[0] : null); $record->seoTwitterImageId = $assetId; $assetId = (!empty($model->seoFacebookImageId) ? $model->seoFacebookImageId[0] : null); $record->seoFacebookImageId = $assetId; if (!$record->validate()) { // Copy the record's errors over to the ad model $model->addErrors($record->getErrors()); // Might as well validate the content as well, // so we get a complete list of validation errors if (!craft()->content->validateContent($model)) { // Copy the content model's errors over to the ad model $model->addErrors($model->getContent()->getErrors()); } return false; } if (!$model->hasErrors()) { $transaction = craft()->db->getCurrentTransaction() === null ? craft()->db->beginTransaction() : null; try { if (craft()->elements->saveElement($model)) { if ($isNewMeta) { $record->id = $model->id; $record->elementId = $model->id; } $record->save(false); if ($transaction !== null) { $transaction->commit(); } return true; } } catch (\Exception $e) { if ($transaction !== null) { $transaction->rollback(); } throw $e; } } } /* -- saveMeta */ /* -------------------------------------------------------------------------------- Returns a meta by its ID -------------------------------------------------------------------------------- */ public function getMetaById($metaId, $locale=null) { $result = craft()->elements->getElementById($metaId, 'Seomatic_Meta', $locale); return $result; } /* -- getMetaById */ /* -------------------------------------------------------------------------------- Add the social media URLs to 'seomaticHelper' -------------------------------------------------------------------------------- */ private function addSocialHelpers(&$helper, $social, $identity) { if ($social['twitterHandle']) { ltrim($social['twitterHandle'], '@'); $helper['twitterUrl'] = "https://twitter.com/" . $social['twitterHandle']; } else $helper['twitterUrl'] = ''; if ($social['facebookHandle']) { $helper['facebookUrl'] = "https://www.facebook.com/" . $social['facebookHandle']; } else $helper['facebookUrl'] = ''; if ($social['googlePlusHandle']) { ltrim($social['googlePlusHandle'], '+'); if (is_numeric(substr($social['googlePlusHandle'], 0, 1))) $helper['googlePlusUrl'] = "https://plus.google.com/" . $social['googlePlusHandle']; else $helper['googlePlusUrl'] = "https://plus.google.com/+" . $social['googlePlusHandle']; } else $helper['googlePlusUrl'] = ''; if ($social['linkedInHandle']) { if ($identity['siteOwnerType'] == "Person") $helper['linkedInUrl'] = "https://www.linkedin.com/in/" . $social['linkedInHandle']; else $helper['linkedInUrl'] = "https://www.linkedin.com/company/" . $social['linkedInHandle']; } else $helper['linkedInUrl'] = ''; if ($social['youtubeHandle']) { $helper['youtubeUrl'] = "https://www.youtube.com/user/" . $social['youtubeHandle']; } else $helper['youtubeUrl'] = ''; if ($social['youtubeChannelHandle']) { $helper['youtubeChannelUrl'] = "https://www.youtube.com/c/" . $social['youtubeChannelHandle']; } else $helper['youtubeChannelUrl'] = ''; if ($social['instagramHandle']) { $helper['instagramUrl'] = "https://www.instagram.com/" . $social['instagramHandle']; } else $helper['instagramUrl'] = ''; if ($social['pinterestHandle']) { $helper['pinterestUrl'] = "https://www.pinterest.com/" . $social['pinterestHandle']; } else $helper['pinterestUrl'] = ''; if ($social['githubHandle']) { $helper['githubUrl'] = "https://github.com/" . $social['githubHandle']; } else $helper['githubUrl'] = ''; if ($social['vimeoHandle']) { $helper['vimeoUrl'] = "https://vimeo.com/" . $social['vimeoHandle']; } else $helper['vimeoUrl'] = ''; if ($social['wikipediaUrl']) { $helper['wikipediaUrl'] = $social['wikipediaUrl']; } else $helper['wikipediaUrl'] = ''; } /* -- addSocialHelpers */ /* -------------------------------------------------------------------------------- Add the Identity helper strings to 'seomaticHelper' -------------------------------------------------------------------------------- */ private function addIdentityHelpers(&$helper, $identity) { /* -- Computed identity strings */ $helper['ownerGoogleSiteVerification'] = $identity['googleSiteVerification']; $helper['ownerBingSiteVerification'] = $identity['bingSiteVerification']; $helper['ownerGoogleAnalyticsUID'] = $identity['googleAnalyticsUID']; $helper['ownerGoogleTagManagerID'] = $identity['googleTagManagerID']; $helper['googleAnalyticsSendPageview'] = $identity['googleAnalyticsSendPageview']; $helper['googleAnalyticsAdvertising'] = $identity['googleAnalyticsAdvertising']; $helper['googleAnalyticsEcommerce'] = $identity['googleAnalyticsEcommerce']; $helper['googleAnalyticsEEcommerce'] = $identity['googleAnalyticsEEcommerce']; $helper['googleAnalyticsLinkAttribution'] = $identity['googleAnalyticsLinkAttribution']; $helper['googleAnalyticsLinker'] = $identity['googleAnalyticsLinker']; $helper['googleAnalyticsAnonymizeIp'] = $identity['googleAnalyticsAnonymizeIp']; $now = new DateTime; $period = "."; $name = $identity['genericOwnerName']; if ($name) { if ($name[strlen($name) -1] == '.') $period =" "; } $helper['ownerCopyrightNotice'] = Craft::t("Copyright") . " ©" . $now->year() . " " . $name . $period; $helper['ownerAddressString'] = ''; $helper['ownerAddressHtml'] = ''; $helper['ownerMapUrl'] = ''; if ($identity['genericOwnerStreetAddress'] && $identity['genericOwnerAddressLocality'] && $identity['genericOwnerAddressRegion'] && $identity['genericOwnerPostalCode']) { $helper['ownerAddressString'] = $identity['genericOwnerName'] . ", " . $identity['genericOwnerStreetAddress'] . ", " . $identity['genericOwnerAddressLocality'] . ", " . $identity['genericOwnerAddressRegion'] . " " . $identity['genericOwnerPostalCode'] . ", " . $identity['genericOwnerAddressCountry']; $helper['ownerAddressHtml'] = $identity['genericOwnerName'] . "<br />" . $identity['genericOwnerStreetAddress'] . "<br />" . $identity['genericOwnerAddressLocality'] . ", " . $identity['genericOwnerAddressRegion'] . " " . $identity['genericOwnerPostalCode'] . "<br />" . $identity['genericOwnerAddressCountry'] . "<br />"; $params=array(); $params = count($params) ? '&' . http_build_query($params) : ''; $query = urlencode($helper['ownerAddressString']); $helper['ownerMapUrl'] = "http://maps.google.com/maps?q={$query}{$params}"; } } /* -- addSIdentityHelpers */ /* -------------------------------------------------------------------------------- Add the Creator helper strings to 'seomaticHelper' -------------------------------------------------------------------------------- */ private function addCreatorHelpers(&$helper, $creator) { /* -- Computed identity strings */ $now = new DateTime; $period = "."; $name = $creator['genericCreatorName']; if ($name) { if ($name[strlen($name) -1] == '.') $period =" "; } $helper['creatorCopyrightNotice'] = Craft::t("Copyright") . " ©" . $now->year() . " " . $name . $period; $helper['creatorAddressString'] = ''; $helper['creatorAddressHtml'] = ''; $helper['creatorMapUrl'] = ''; if ($creator['genericCreatorStreetAddress'] && $creator['genericCreatorAddressLocality'] && $creator['genericCreatorAddressRegion'] && $creator['genericCreatorPostalCode']) { $helper['creatorAddressString'] = $creator['genericCreatorName'] . ", " . $creator['genericCreatorStreetAddress'] . ", " . $creator['genericCreatorAddressLocality'] . ", " . $creator['genericCreatorAddressRegion'] . " " . $creator['genericCreatorPostalCode'] . ", " . $creator['genericCreatorAddressCountry']; $helper['creatorAddressHtml'] = $creator['genericCreatorName'] . "<br />" . $creator['genericCreatorStreetAddress'] . "<br />" . $creator['genericCreatorAddressLocality'] . ", " . $creator['genericCreatorAddressRegion'] . " " . $creator['genericCreatorPostalCode'] . "<br />" . $creator['genericCreatorAddressCountry'] . "<br />"; $params=array(); $params = count($params) ? '&' . http_build_query($params) : ''; $query = urlencode($helper['creatorAddressString']); $helper['creatorMapUrl'] = "http://maps.google.com/maps?q={$query}{$params}"; } } /* -- addCreatorHelpers */ /* -------------------------------------------------------------------------------- Get a md5 hash string for this combination of $metaVars -------------------------------------------------------------------------------- */ private function getMetaHashStr($templatePath, $metaVars) { $hashStr = $templatePath; $hashStr .= $this->_get_hash_string($metaVars); $result = md5($hashStr); return $result; } /* -- getMetaHashStr */ /* -------------------------------------------------------------------------------- Sanitize the metaVars -------------------------------------------------------------------------------- */ public function sanitizeMetaVars(&$metaVars) { $seomaticMeta = $metaVars['seomaticMeta']; $seomaticSiteMeta = $metaVars['seomaticSiteMeta']; $seomaticIdentity = $metaVars['seomaticIdentity']; $seomaticSocial = $metaVars['seomaticSocial']; $seomaticCreator = $metaVars['seomaticCreator']; if (isset($metaVars['seomaticMainEntityOfPage'])) $seomaticMainEntityOfPage = $metaVars['seomaticMainEntityOfPage']; /* -- Set up the title prefix and suffix for the OpenGraph and Twitter titles */ $titlePrefix = ""; if ($seomaticSiteMeta['siteSeoTitlePlacement'] == "before") $titlePrefix = $seomaticSiteMeta['siteSeoName'] . " " . $seomaticSiteMeta['siteSeoTitleSeparator'] . " "; $titleSuffix = ""; if ($seomaticSiteMeta['siteSeoTitlePlacement'] == "after") $titleSuffix = " " . $seomaticSiteMeta['siteSeoTitleSeparator'] . " " . $seomaticSiteMeta['siteSeoName']; if (isset($seomaticMeta['twitter']['title'])) { $title = $seomaticMeta['twitter']['title']; } else { $title = $seomaticMeta['seoTitle']; } if (isset($seomaticMeta['twitter'])) $seomaticMeta['twitter']['title'] = $titlePrefix . $title . $titleSuffix; if (isset($seomaticMeta['og']['title'])) { $title = $seomaticMeta['og']['title']; } else { $title = $seomaticMeta['seoTitle']; } if (isset($seomaticMeta['og'])) $seomaticMeta['og']['title'] = $titlePrefix . $title . $titleSuffix; /* -- Truncate seoTitle, seoDescription, and seoKeywords to recommended values */ $titleLength = 0; if (craft()->config->get("truncateTitleTags", "seomatic")) { $titleLength = craft()->config->get("maxTitleLength", "seomatic"); if ($seomaticSiteMeta['siteSeoTitlePlacement'] == "none") $titleLength = $titleLength; else $titleLength = ($titleLength - strlen(" | ") - strlen($seomaticSiteMeta['siteSeoName'])); } $descriptionLength = 0; if (craft()->config->get("truncateDescriptionTags", "seomatic")) $descriptionLength = craft()->config->get("maxDescriptionLength", "seomatic"); $keywordsLength = 0; if (craft()->config->get("truncateKeywordsTags", "seomatic")) $keywordsLength = craft()->config->get("maxKeywordsLength", "seomatic"); $vars = array('seoTitle' => $titleLength, 'seoDescription' => $descriptionLength, 'seoKeywords' => $keywordsLength); foreach ($vars as $key => $value) { if (isset($seomaticMeta[$key]) && $value) { $seomaticMeta[$key] = $this->truncateStringOnWord($seomaticMeta[$key], $value); } } /* -- Make sure all of our variables are properly encoded */ $this->sanitizeArray($seomaticMeta); $this->sanitizeArray($seomaticSiteMeta); $this->sanitizeArray($seomaticIdentity); $this->sanitizeArray($seomaticSocial); $this->sanitizeArray($seomaticCreator); if (isset($metaVars['seomaticMainEntityOfPage'])) $this->sanitizeArray($seomaticMainEntityOfPage); $metaVars['seomaticMeta'] = $seomaticMeta; $metaVars['seomaticSiteMeta'] = $seomaticSiteMeta; $metaVars['seomaticIdentity'] = $seomaticIdentity; $metaVars['seomaticSocial'] = $seomaticSocial; $metaVars['seomaticCreator'] = $seomaticCreator; if (isset($metaVars['seomaticMainEntityOfPage'])) $metaVars['seomaticMainEntityOfPage'] = $seomaticMainEntityOfPage; } /* -- sanitizeMetaVars */ /* -------------------------------------------------------------------------------- Returns an array of transforms defined in the system -------------------------------------------------------------------------------- */ public function getTransformsList() { $result = array('' => 'None'); $transforms = craft()->assetTransforms->getAllTransforms(); foreach ($transforms as $transform) { $result[$transform->handle] = $transform->name; } return $result; } /* -- getTransformsList */ /* -------------------------------------------------------------------------------- Returns an array of localized URLs for the current request -------------------------------------------------------------------------------- */ public function getLocalizedUrls() { $localizedUrls = array(); $requestUri = craft()->request->getRequestUri(); $excludeLocales = craft()->config->get("excludeLocales", "seomatic"); if (craft()->isLocalized()) { $element = craft()->urlManager->getMatchedElement(); if ($element) { $unsortedLocalizedUrls = array(); $_rows = craft()->db->createCommand() ->select('locale') ->addSelect('uri') ->from('elements_i18n') ->where(array('elementId' => $element->id, 'enabled' => 1)) ->queryAll(); foreach ($_rows as $row) { $path = ($row['uri'] == '__home__') ? '' : $row['uri']; $url = UrlHelper::getSiteUrl($path, null, null, $row['locale']); if (craft()->config->get('addTrailingSlashesToUrls')) { $url = rtrim($url, '/') . '/'; } $unsortedLocalizedUrls[$row['locale']] = $url; } $locales = craft()->i18n->getSiteLocales(); foreach ($locales as $locale) { $localeId = $locale->getId(); if (!in_array($localeId, $excludeLocales)) { if (isset($unsortedLocalizedUrls[$localeId])) $localizedUrls[$localeId] = $unsortedLocalizedUrls[$localeId]; } } } else { $locales = craft()->i18n->getSiteLocales(); foreach ($locales as $locale) { $localeId = $locale->getId(); if (!in_array($localeId, $excludeLocales)) { $localizedUrls[$localeId] = UrlHelper::getSiteUrl($requestUri, null, null, $localeId); } } } } return $localizedUrls; } /* -- getLocalizedUrls */ /* -------------------------------------------------------------------------------- Get a fully qualified URL based on the siteUrl, if no scheme/host is present -------------------------------------------------------------------------------- */ public function getFullyQualifiedUrl($url) { $result = $url; if (!isset($result) || $result == "") return $result; if (UrlHelper::isAbsoluteUrl($url) || UrlHelper::isProtocolRelativeUrl($url)) { /* -- The URL is already a fully qualfied URL, do nothing */ } else { $siteUrlOverride = craft()->config->get("siteUrlOverride", "seomatic"); if ($siteUrlOverride) { $siteUrl = $siteUrlOverride; if (($siteUrl[strlen($siteUrl) -1] == '/') && ($result[0] == '/')) { $siteUrl = rtrim($siteUrl, '/'); } $result = $siteUrl . $result; } else { $siteUrl = UrlHelper::getSiteUrl('', null, null, craft()->language); // Do this to prevent duplicate locales in the URL, e.g.: https://example.com/en/en/ $siteUrl = rtrim($siteUrl, '/') . '/'; $result = $this->replaceOverlap($siteUrl, $url); if ($result === false) { $result = UrlHelper::getSiteUrl($url, null, null, craft()->language); } } } $result = rtrim($result, '/'); // Add a trailing / if `addTrailingSlashesToUrls` is set, but only if there's one extension if (craft()->config->get('addTrailingSlashesToUrls')) { $path = parse_url($result, PHP_URL_PATH); $pathExtension = pathinfo($path,PATHINFO_EXTENSION); if (empty($pathExtension)) $result = rtrim($result, '/') . '/'; } return $result; } /* -- getFullyQualifiedUrl */ /* -------------------------------------------------------------------------------- Extract the most important words from the passed in text via TextRank -------------------------------------------------------------------------------- */ public function extractKeywords($text = null, $limit = 15, $withoutStopWords = true) { if (!$text) return; $text = strtolower($text); $config = new Config; if ($withoutStopWords) { $config->addListener(new Stopword); } $textRank = new TextRank($config); try { $keywords = $textRank->getKeywords( $this->_cleanupText($text) ); } catch (\RuntimeException $e) { $keywords = null; } if ($keywords == "") $keywords = str_replace(' ', ',' , $text); return (is_array($keywords)) ? implode(", ", array_slice(array_keys($keywords), 0, $limit)) : $keywords; } /* -- extractKeywords */ /* -------------------------------------------------------------------------------- Extract a summary from the text, or if it's not long enough, just return the text -------------------------------------------------------------------------------- */ public function extractSummary($text = null, $limit = null, $withoutStopWords = true) { if (!$text) return; $config = new Config; if ($withoutStopWords) { $config->addListener(new Stopword); } $analyzer = new Summary($config); try { $summary = $analyzer->getSummary( $this->_cleanupText($text) ); if ($summary && is_integer($limit)) { $summary = mb_strimwidth($summary, 0, $limit, "..."); } } catch (\RuntimeException $e) { $summary = $text; } if ($summary == "") $keywords = $text; return $summary; } /* -- extractSummary */ /* -------------------------------------------------------------------------------- Return a human-readable file size -------------------------------------------------------------------------------- */ public function humanFileSize($size) { if ($size >= 1073741824) { $fileSize = round($size / 1024 / 1024 / 1024,1) . 'GB'; } elseif ($size >= 1048576) { $fileSize = round($size / 1024 / 1024,1) . 'MB'; } elseif($size >= 1024) { $fileSize = round($size / 1024,1) . 'KB'; } else { $fileSize = $size . ' bytes'; } return $fileSize; } /* -- humanFileSize */ /* -------------------------------------------------------------------------------- Sanitize the passed in array recursively -------------------------------------------------------------------------------- */ public function sanitizeArray(&$theArray) { foreach ($theArray as $key => &$value) { if (is_object($value)) $value = (string)$value; if (is_string($value)) { $value = craft()->config->parseEnvironmentString($value); $value = strip_tags($value); /* -- Strip all control characters */ $value = preg_replace('/[\x00-\x1F\x7F]/', ' ', $value);; if ($key === 'email') $value = $this->encodeEmailAddress($value); elseif ($key === 'url' || $key === 'image' || $key === 'logo') $value = $this->getFullyQualifiedUrl($value); $value = htmlspecialchars($value, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); $theArray[$key] = $value; } else { if (is_array($value)) $this->sanitizeArray($value); } } } /* -- sanitizeArray */ /** * As per https://stackoverflow.com/questions/2945446/built-in-function-to-combine-overlapping-string-sequences-in-php * @param $str1 * @param $str2 * * @return array|bool */ private function findOverlap($str1, $str2){ $return = array(); $sl1 = strlen($str1); $sl2 = strlen($str2); $max = $sl1>$sl2?$sl2:$sl1; $i=1; while($i<=$max){ $s1 = substr($str1, -$i); $s2 = substr($str2, 0, $i); if($s1 == $s2){ $return[] = $s1; } $i++; } if(!empty($return)){ return $return; } return false; } /** * As per: https://stackoverflow.com/questions/2945446/built-in-function-to-combine-overlapping-string-sequences-in-php * @param $str1 * @param $str2 * @param string $length * * @return bool|string */ private function replaceOverlap($str1, $str2, $length = "long"){ if($overlap = $this->findOverlap($str1, $str2)){ switch($length){ case "short": $overlap = $overlap[0]; break; case "long": default: $overlap = $overlap[count($overlap)-1]; break; } $str1 = substr($str1, 0, -strlen($overlap)); $str2 = substr($str2, strlen($overlap)); return $str1.$overlap.$str2; } return false; } /* -------------------------------------------------------------------------------- Cleanup text before extracting keywords/summary -------------------------------------------------------------------------------- */ private function _cleanupText($text = null) { /* -- convert to UTF-8 */ if (function_exists('iconv')) { $text = iconv(mb_detect_encoding($text, mb_detect_order(), true), "UTF-8//IGNORE", $text); } else { ini_set('mbstring.substitute_character', "none"); $text = mb_convert_encoding($text, 'UTF-8', 'UTF-8'); } /* -- strip HTML tags */ $text = preg_replace('#<[^>]+>#', ' ', $text); /* -- remove excess whitespace */ $text = preg_replace('/\s{2,}/u', ' ', $text); $text = html_entity_decode($text); return $text; } /* -- _cleanupText */ /* -------------------------------------------------------------------------------- Print out a Twig array, recursing it as necessary -------------------------------------------------------------------------------- */ private function _print_twig_array($theArray, $level) { $htmlText = ""; $i = 0; $len = count($theArray); foreach ($theArray as $key => $value) { if ($i == $len - 1) $comma = ""; else $comma = ","; if (is_array($value)) { if (empty($value)) { $line = "\"" . $key . "\"" . ": [],\n"; $line = str_pad($line, strlen($line) + ($level * 4), " ", STR_PAD_LEFT); } else { $keys = array_keys($value); if ($keys[0] == "0") { $predicate = ": ["; $suffix = "]" . $comma . "\n"; $subLines = ""; $numSubi = count($value); $subi = 0; foreach ($value as $subValue) { $subi++; if ($subi == $numSubi) $subComma = ""; else $subComma = ","; if (is_array($subValue)) { $blockOpen = "{"; $blockOpen = str_pad($blockOpen, strlen($blockOpen) + (($level+1) * 4), " ", STR_PAD_LEFT); $blockClose = "}" . $subComma; $blockClose = str_pad($blockClose, strlen($blockClose) + (($level+1) * 4), " ", STR_PAD_LEFT); $subLines = $subLines . "\n" . $blockOpen . "\n" . $this->_print_twig_array($subValue, $level + 2) . $blockClose; if ($subi == $numSubi) { $subLines .= "\n"; $suffix = str_pad($suffix, strlen($suffix) + ($level * 4), " ", STR_PAD_LEFT); } } else $subLines .= "\"" . $subValue . "\"" . $subComma; } if ($level < 1) { $predicate = "{% set " . $key . " = [ "; $suffix = "] %}" . "\n\n"; $key = ""; } else $key = "\"" . $key . "\""; $line = $key . $predicate; $line = str_pad($line, strlen($line) + ($level * 4), " ", STR_PAD_LEFT); $line = $line . $subLines . $suffix; } else { $predicate = "\"" . $key . "\"" . ": { " . "\n"; $suffix = $comma; if ($level < 1) { $predicate = "{% set " . $key . " = { " . "\n"; $suffix = " %}" . "\n"; } $predicate = str_pad($predicate, strlen($predicate) + ($level * 4), " ", STR_PAD_LEFT); $line = $this->_print_twig_array($value, $level + 1); $suffix = "}" . $suffix . "\n"; $suffix = str_pad($suffix, strlen($suffix) + ($level * 4), " ", STR_PAD_LEFT); $line = $predicate . $line . $suffix; } } } else { if ($level < 1) $line = "{% set " . $key . " = \"" . htmlspecialchars($value, ENT_COMPAT | ENT_HTML401, 'UTF-8', false) . "\" %}" . "\n"; else { $line = "\"" . $key . "\"" . ": \"" . htmlspecialchars($value, ENT_COMPAT | ENT_HTML401, 'UTF-8', false) . "\"" . $comma . "\n"; $line = str_pad($line, strlen($line) + ($level * 4), " ", STR_PAD_LEFT); } } $htmlText = $htmlText . $line; $i++; } return $htmlText; } /* -- _print_twig_array */ /* -------------------------------------------------------------------------------- Concatenate all of the values in an array recursively -------------------------------------------------------------------------------- */ private function _get_hash_string($theArray) { $result = ""; foreach ($theArray as $key => $value) { if (is_array($value)) $line = $this->_get_hash_string($value); else $line = $value; $result .= $line; } return $result; } /* -- _get_hash_string */ /* -------------------------------------------------------------------------------- Truncate the the string passed in, breaking it on a word. $desiredLength is in characters; the returned string will be broken on a whole-word boundary, with an … appended to the end if it is truncated -------------------------------------------------------------------------------- */ public function truncateStringOnWord($theString, $desiredLength) { $theString = $this->_cleanupText($theString); if (strlen($theString) > $desiredLength) { /* -- Force-add a space after commas */ $theString = preg_replace("/,([^\s])/", ", $1", $theString); /* -- Wrap the string to the right length */ $theString = wordwrap($theString, $desiredLength); $theString = substr($theString, 0, strpos($theString, "\n")); if (substr($theString, -1) == ',') $theString = rtrim($theString, ','); else { if (strlen($theString) < $desiredLength) $theString = $theString . "…"; } } return $theString; } /* -- truncateStringOnWord */ /* -------------------------------------------------------------------------------- Encode an email address as ordinal values to obfuscate it to bots -------------------------------------------------------------------------------- */ public function encodeEmailAddress($emailAddress) { $result = ''; for ($i = 0; $i < strlen($emailAddress); $i++) { $result .= '&#'.ord($emailAddress[$i]).';'; } return $result; } /* -- encodeEmailAddress */ /** * Loops through the data and converts the times to DateTime objects. * * @access private * @param array &$value */ public function convertTimes(&$value, $timezone=null) { if (isset($value) && is_array($value)) { foreach ($value as &$day) { if ((is_string($day['open']) && $day['open']) || (is_array($day['open']) && $day['open']['time'])) { $day['open'] = DateTime::createFromString($day['open'], $timezone); } else { $day['open'] = ''; } if ((is_string($day['close']) && $day['close']) || (is_array($day['close']) && $day['close']['time'])) { $day['close'] = DateTime::createFromString($day['close'], $timezone); } else { $day['close'] = ''; } } } } /* -- convertTimes */ } /* -- class SeomaticService */ ================================================ FILE: templates/_error.twig ================================================ {% includeCssResource "css/craft.css" %} {% includeJsResource "seomatic/js/jquery-2.2.4.min.js" %} {% includeCssResource "seomatic/css/seo-metrics-style.css" %} <div style="padding: 50px;"> <h3><span style="color: red">Error: </span>{{ errorMessage }}</span></h3> </div> ================================================ FILE: templates/_facebookDisplayPreview.twig ================================================ {% if seomaticMeta.og is defined and seomaticMeta.og %} <div class="Facebook-container"> <div class=""> <a href="{{ seomaticMeta.canonicalUrl }}" target="_blank"> <div class="Facebook-image-wrap"> <div id="facebook-post-image" class="Facebook-post-image" style="width:470px;height:246px;"> </div> </div> </a> </div> <div class="facebook-text-wrap"> <div class="Facebook-text-container"> <div class="Facebook-headline"> <a class="Facebook-link" href="{{ seomaticMeta.canonicalUrl }}" target="_blank">{{ seomaticMeta.og.title |raw }}</a> </div> <div class="Facebook-text"> {{ seomaticMeta.og.description |raw }} </div> <div class="Facebook-site-url-wrapper"> <div> <div class="Facebook-site-url"> {{ siteUrl | replace({'http://': ''}) | replace({'https://': ''}) | replace({'/': ''}) }} </div> </div> </div> </div> </div> </div> <script type="text/javascript"> var x = document.getElementsByClassName("Facebook-post-image"); var i; for (i = 0; i < x.length; i++) { x[i].style.backgroundImage = "url(" + "{{ resourceUrl('seomatic/images/no_image_set.png') }}" + ")"; {% if seomaticMeta.og.image %} x[i].style.backgroundImage = "url(" + "{{ seomaticMeta.og.image }}" + ")"; {% endif %} } </script> {% else %} <p>No Facebook Profile ID has been set</p> {% endif %} ================================================ FILE: templates/_googleAnalytics.twig ================================================ {% if seomaticHelper.ownerGoogleAnalyticsUID %} <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '{{ seomaticHelper.ownerGoogleAnalyticsUID |raw }}', 'auto'{% if seomaticHelper.googleAnalyticsLinker %}, {allowLinker: true}{% endif %}); {% if seomaticHelper.googleAnalyticsAnonymizeIp %} ga('set', 'anonymizeIp', true); {% endif %} {% if seomaticHelper.googleAnalyticsAdvertising %} ga('require', 'displayfeatures'); {% endif %} {% if seomaticHelper.googleAnalyticsEcommerce %} ga('require', 'ecommerce'); {% endif %} {% if seomaticHelper.googleAnalyticsEEcommerce %} ga('require', 'ec'); {% endif %} {% if seomaticHelper.googleAnalyticsLinkAttribution %} ga('require', 'linkid'); {% endif %} {% if seomaticHelper.googleAnalyticsLinker %} ga('require', 'linker'); {% endif %} {% if seomaticHelper.googleAnalyticsSendPageview %} ga('send', 'pageview'); {% endif %} </script> {% endif %} ================================================ FILE: templates/_googleDisplayPreview.twig ================================================ <div class="rc" data-hveid="27"> <h3 class="googleDisplay"> <a class="googleDisplay" href="{{ seomaticMeta.canonicalUrl }}" target="_blank">{{ seomaticMeta.og.title |raw }}</a> </h3> <div class="googleDisplay1"> <div> <div class="googleDisplay2" style="white-space:nowrap"> <cite class="googleDisplay">{{ seomaticMeta.canonicalUrl | replace({'http://': ''}) | replace({'https://': ''}) }}</cite> <div class="googleDisplay3"> <span class="googleDisplay1"></span> </div> </div> <span class="googleDisplay2">{{ seomaticMeta.seoDescription |raw }}</span> </div> </div> </div> ================================================ FILE: templates/_googleTagManager.twig ================================================ {% if seomaticHelper.ownerGoogleTagManagerID %} <script> {{ gtmDataLayerVariableName }} = [{% if dataLayer is defined and dataLayer %}{{ dataLayer |json_encode() |raw }}{% endif %}]; (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','{{ gtmDataLayerVariableName }}','{{ seomaticHelper.ownerGoogleTagManagerID }}'); </script> {% endif %} ================================================ FILE: templates/_humans.twig ================================================ {% header "Content-Type: text/plain" %} {{ craft.seomatic.renderHumansTemplate() |raw }} ================================================ FILE: templates/_humansDefault.twig ================================================ /* TEAM */ {% if seomaticCreator.name is defined and seomaticCreator.name %} Creator: {{ seomaticCreator.name }} {% endif %} {% if seomaticCreator.url is defined and seomaticCreator.url %} URL: {{ seomaticCreator.url }} {% endif %} {% if seomaticCreator.description is defined and seomaticCreator.description %} Description: {{ seomaticCreator.description }} {% endif %} /* THANKS */ Pixel & Tonic - https://pixelandtonic.com /* SITE */ Standards: HTML5, CSS3 Components: Craft CMS, Yii, PHP, Javascript, SEOmatic ================================================ FILE: templates/_humansPreview.twig ================================================ {{ craft.seomatic.renderHumansTemplate() | raw }} ================================================ FILE: templates/_preview_display_modal.twig ================================================ <div id="preview-display-popup" style="display: none;"> <div class="preview-modal"> <div class="preview-modal-inner"> <div class="displaypreview-container"> <h1>{{ "Rendered For" |t }}</h1> <p>{% if elementId%}{{ "<code>Entry</code> Meta. This is what is generated for the this Entry with data from the SEOmatic Meta field." |t | raw }}{% else %}{% if previewMetaPath %}<code>{{ previewMetaPath }}</code> {{ "<code>SEO Template</code> Meta. This is what is generated when this template is displayed." |t | raw }}{% else %}{{ "<code>SEO Site</code> Meta. This is what is generated for the global Site Meta, with no Template Meta overrides." |t | raw }}{% endif %}{% endif %}</p> <div class="preview-column"> <h1><br />{{ "Google Search Result Display" |t }}</h1> <p>{{ "This is a preview of how the Google search result will appear for this page, due to the SEO Meta tags generated by SEOmatic." |t |raw }}</p> <div class="displaypreview">{{ craft.seomatic.renderDisplayPreview('_googleDisplayPreview', previewMetaPath, elementId, locale) |raw }}</div> </div> <div class="preview-column"> <h1><br />{{ "Twitter Card Display" |t }}</h1> <p>{{ "If someone Tweets a link to this page, this is how the Twitter Card attached to their tweet (via the 'View summary' link) will appear, due to the Twitter Card tags generated by SEOmatic." |t |raw }}</p> <div class="displaypreview">{{ craft.seomatic.renderDisplayPreview('_twitterCardDisplayPreview', previewMetaPath, elementId, locale) |raw }}</div> </div> <div class="preview-column"> <h1><br />{{ "Facebook OpenGraph Display" |t }}</h1> <p>{{ "If someone posts a link to this page on Facebook, this is how the summary below their post will appear, due to the Facebook OpenGraph tags generated by SEOmatic." |t |raw }}</p> <div class="displaypreview">{{ craft.seomatic.renderDisplayPreview('_facebookDisplayPreview', previewMetaPath, elementId, locale) |raw }}</div> </div> </div> </div> </div> </div> ================================================ FILE: templates/_preview_humans_modal.twig ================================================ <div id="preview-humans-popup" style="display: none;"> <div class="preview-modal"> <div class="preview-modal-inner"> <div class="displaypreview-container"> <div class="preview-column"> <h1>{{ "Preview Humans.txt" |t }}</h1> <p>{{ "<a href='http://humanstxt.org' target='_blank'>Humans.txt</a> is an initiative for knowing the people behind a website. It's a TXT file that contains information about the different people who have contributed to building the website. By adding a txt file, you can prove your authorship (not your property) in an external, fast, easy and accessible way." |t |raw }}</p> <p>{{ "SEOmatic automatically generates <a href='http://humanstxt.org' target='_blank'>Humans.txt</a> authorship accreditation with the following tag:" |t |raw }}</p> <pre><code class="language-markup">{% set humansTag = '<link type="text/plain" rel="author" href="/humans.txt" />' %}{{ humansTag }}</code></pre> <p>{{ "The rendered <code>humans.txt</code> file:" |t |raw }}</p> <pre><code class="language-markup">{{ craft.seomatic.renderHumans(true) }}</code></pre> </div> </div> <a href="http://humanstxt.org/" target="_blank"><img src="{{ resourceUrl('seomatic/images/humanstxt-isolated-blank.gif') }}" width="88" height="31" /></a> </div> </div> </div> ================================================ FILE: templates/_preview_robots_modal.twig ================================================ <div id="preview-robots-popup" style="display: none;"> <div class="preview-modal"> <div class="preview-modal-inner"> <div class="displaypreview-container"> <div class="preview-column"> <h1>{{ "Preview robots.txt" |t }}</h1> <p>{{ "A <code>robots.txt</code> file is a file at the root of your site that indicates those parts of your site you don’t want accessed by search engine crawlers. The file uses the <a href='http://en.wikipedia.org/wiki/Robots_exclusion_standard#About_the_standard' target='_blank'>Robots Exclusion Standard</a>, which is a protocol with a small set of commands that can be used to indicate access to your site by section and by specific kinds of web crawlers (such as mobile crawlers vs desktop crawlers)." |t |raw }}</p> <p>{{ "SEOmatic automatically handles requests for <code>/robots.txt</code>. For this to work, make sure that you do not have an actual <code>robots.txt</code> file in your <code>public/</code> folder (because that will take precedence)." |t |raw }}</p> <p>{{ "The rendered <code>robots.txt</code> file:" |t |raw }}</p> <pre><code class="language-markup">{{ craft.seomatic.renderRobots(true) }}</code></pre> </div> </div> </div> </div> </div> ================================================ FILE: templates/_preview_tags_modal.twig ================================================ <div id="preview-tags-popup" style="display: none;"> <div class="preview-modal"> <div class="preview-modal-inner"> <div class="displaypreview-container"> <h1>{{ "Rendered For" |t }}</h1> <p>{% if elementId%}{{ "<code>Entry</code> Meta. This is what is generated for this Entry with data from the SEOmatic Meta field." |t | raw }}{% else %}{% if previewMetaPath %}<code>{{ previewMetaPath }}</code> {{ "SEO Template Meta. This is what is generated when this template is displayed." |t | raw }}{% else %}{{ "<code>SEO Site</code> Meta. This is what is generated for the global Site Meta, with no Template Meta overrides." |t | raw }}{% endif %}{% endif %}</p> <div class="preview-column"> <h1><br />{{ "Meta Template Variables" |t }}</h1> <p>{{ "These are the Twig variables that SEOmatic pre-populates, and makes available to you in your templates. They are used when rendering the SEO Meta, so you can manipulate them however you want before rendering your SEO Meta. For example, you might change the <code>seomaticMeta.seoDescription</code> to be the summary field of an entry." |t |raw }}</p> <pre><code class="language-twig">{{ craft.seomatic.renderGlobals(previewMetaPath, elementId, locale) | raw }}</code></pre> <p>{{ "You can treat all of these like regular Twig variables; for instance, <code>{{ seomaticHelper.twitterUrl }}</code> will output the URL to the website's Twitter page. You can change these variables using the Twig array <a href='http://twig.sensiolabs.org/doc/tags/set.html' target='_blank'>set</a> syntax, or using the Twig function <a href='http://twig.sensiolabs.org/doc/filters/merge.html' target='_blank'>merge</a>. Any changes you make will be reflected in the SEO Meta rendered with <code>{% hook 'seomaticRender' %}</code> on your page. The <code>email</code> variables are ordinal-encoded to obfuscate them. See the documentation for details by clicking on the ? link below." |t |raw }}</p> </div> <div class="preview-column"> <h1><br />{{ "Rendered SEO Meta" |t }}</h1> <p>{{ "The <code>{% hook 'seomaticRender' %}</code> tag generates these SEO Meta for you, based on the Meta Template Variables (see below). By default, it uses an internal template, but you can pass your own template to be used instead, like this: <code>{% set seomaticTemplatePath = 'path/template' %} {% hook 'seomaticRender' %}</code>" |t |raw }}</p> <p>{{ "SEOmatic cascades Meta settings; if you have a Meta associated with the current template, it uses that. Otherwise it falls back on the SEO Site Meta settings. If a field is empty for a Template Meta, it falls back on the SEO Site Meta setting for that field." |t |raw }}</p> <pre><code class="language-markup">{{ craft.seomatic.renderPreview('', previewMetaPath, elementId, locale) }}</code></pre> </div> <div class="preview-column"> <h1><br />{{ "Rendered Identity Microdata" |t }}</h1> <p>{{ "The <code>{% hook 'seomaticRender' %}</code> tag also generates <a href='https://developers.google.com/schemas/formats/json-ld?hl=en' target='_blank'>JSON-LD</a> identity microdata that tells search engines about the company that owns the website. JSON-LD is an alternative to microdata you may already be familiar with, such as: <code><div itemscope itemtype='http://schema.org/Organization'></code>. JSON-LD has the advantage of not being intertwined with HTML markup, so it's easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess." |t |raw }}</p> <pre><code class="language-markup">{{ craft.seomatic.renderIdentity(elementId, locale, true) }}</code></pre> </div> <div class="preview-column"> <h1><br />{{ "Rendered WebSite Microdata" |t }}</h1> <p>{{ "The <code>{% hook 'seomaticRender' %}</code> tag also generates <a href='https://developers.google.com/schemas/formats/json-ld?hl=en' target='_blank'>JSON-LD</a> WebSite microdata that tells search engines about the website. JSON-LD is an alternative to microdata you may already be familiar with, such as: <code><div itemscope itemtype='http://schema.org/Organization'></code>. JSON-LD has the advantage of not being intertwined with HTML markup, so it's easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess." |t |raw }}</p> <pre><code class="language-markup">{{ craft.seomatic.renderWebsite(elementId, locale, true) }}</code></pre> </div> <div class="preview-column"> <h1><br />{{ "Main Entity of Page Microdata" |t }}</h1> <p>{{ "The <code>{% hook 'seomaticRender' %}</code> tag also generates additional <a href='https://developers.google.com/schemas/formats/json-ld?hl=en' target='_blank'>JSON-LD</a> for the, if specified. The Main Entity of Page is a more specific, additional type of information that describes the page. This additional JSON-LD structured data entity will be added to your page, more specifically describing the page's content. It is accessible via the seomaticMainEntityOfPage Twig variable. If an SEOmatic FieldType is attached to a Craft Commerce Product, SEOmatic will automatically extrapolate information from the Product. Otherwise, you can choose your own Main Entity of Page in the SEOmatic FieldType." |t |raw }}</p> <pre><code class="language-markup">{{ craft.seomatic.renderMainEntityOfPage(elementId, locale, true) }}</code></pre> </div> <div class="preview-column"> <h1><br />{{ "Rendered Breadcrumbs Microdata" |t }}</h1> <p>{{ "The <code>{% hook 'seomaticRender' %}</code> tag also generates <a href='https://developers.google.com/schemas/formats/json-ld?hl=en' target='_blank'>JSON-LD</a> for <a href='https://developers.google.com/search/docs/data-types/breadcrumbs' target='_blank'>Breadcrumbs</a>. JSON-LD is an alternative to microdata you may already be familiar with, such as: <code><div itemscope itemtype='http://schema.org/Organization'></code>. JSON-LD has the advantage of not being intertwined with HTML markup, so it's easier to use. It is parsed and consumed by Google, allowing you to tell Google what breadcrumbs to display on the SERP rich card." |t |raw }}</p> <pre><code class="language-markup">{{ craft.seomatic.renderBreadcrumbs(elementId, locale, true) }}</code></pre> </div> <div class="preview-column"> <h1><br />{{ "Rendered Place Microdata" |t }}</h1> <p>{{ "The <code>{% hook 'seomaticRender' %}</code> tag also generates <a href='https://developers.google.com/schemas/formats/json-ld?hl=en' target='_blank'>JSON-LD</a> Place microdata for Organizations that tells search engines where the organization is located. JSON-LD is an alternative to microdata you may already be familiar with, such as: <code><div itemscope itemtype='http://schema.org/Organization'></code>. JSON-LD has the advantage of not being intertwined with HTML markup, so it's easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess." |t |raw }}</p> <pre><code class="language-markup">{{ craft.seomatic.renderPlace(elementId, locale, true) }}</code></pre> </div> </div> </div> </div> </div> ================================================ FILE: templates/_robots.twig ================================================ {% header "Content-Type: text/plain" %} {{ craft.seomatic.renderRobotsTemplate() |raw }} ================================================ FILE: templates/_robotsDefault.twig ================================================ # robots.txt for {{ siteUrl }} # For a multi-environment setup, see: https://nystudio107.com/blog/prevent-google-from-indexing-staging-sites Sitemap: {{ siteUrl |trim('/') }}/sitemap.xml {% if craft.config.devMode %} # devMode - disallow all User-agent: * Disallow: / {% else %} # Live - Don't allow web crawlers to index Craft User-agent: * Disallow: /craft/ {% endif %} ================================================ FILE: templates/_robotsPreview.twig ================================================ {{ craft.seomatic.renderRobotsTemplate() | raw }} ================================================ FILE: templates/_seo_meta.twig ================================================ <!-- BEGIN SEOmatic rendered SEO Meta --> <title>{% if craft.config.devMode %}{{ seomaticSiteMeta.siteDevModeTitle }} {% endif %}{% if seomaticSiteMeta.siteSeoTitlePlacement == "before" %}{{ seomaticSiteMeta.siteSeoName |raw }}{% if seomaticMeta.seoTitle %} {{ seomaticSiteMeta.siteSeoTitleSeparator }} {% endif %}{% endif %}{{ seomaticMeta.seoTitle |raw }}{% if seomaticSiteMeta.siteSeoTitlePlacement == "after" %}{% if seomaticMeta.seoTitle %} {{ seomaticSiteMeta.siteSeoTitleSeparator }} {% endif %}{{ seomaticSiteMeta.siteSeoName |raw }}{% endif %} {% if seomaticMeta.robots is defined and seomaticMeta.robots %} {% endif %} {% if seomaticMeta.seoKeywords is defined and seomaticMeta.seoKeywords %} {% endif %} {% if seomaticMeta.seoDescription is defined and seomaticMeta.seoDescription %} {% endif %} {% if seomaticMeta.canonicalUrl |length %} {% endif %} {% set localizedUrls = getLocalizedUrls() %} {% if localizedUrls |length > 0 %} {% else %} {% endif %} {% if localizedUrls |length > 1 %} {% for key, value in localizedUrls %} {% endfor %} {% endif %} {% if seomaticIdentity.address.addressRegion is defined and seomaticIdentity.address.addressRegion %} {% endif %} {% if seomaticIdentity.location.geo.latitude is defined and seomaticIdentity.location.geo.latitude and seomaticIdentity.location.geo.latitude is defined and seomaticIdentity.location.geo.latitude %} {% endif %} {% if seomaticIdentity.location.name is defined and seomaticIdentity.location.name %} {% endif %} {% if seomaticCreator.name is defined and seomaticCreator.name %} {% endif %} {% if seomaticMeta.og is defined and seomaticMeta.og %} {% if seomaticSocial.facebookProfileId %} {% endif %} {% if seomaticSocial.facebookAppId %} {% endif %} {% for key, value in seomaticMeta.og %} {% if value %} {% if value is iterable %} {% for subvalue in value %} {% endfor %} {% else %} {% endif %} {% endif %} {% endfor %} {% if seomaticMeta.article is defined and seomaticMeta.article %} {% for key, value in seomaticMeta.article %} {% if value %} {% if value is iterable %} {% for subvalue in value %} {% endfor %} {% else %} {% endif %} {% endif %} {% endfor %} {% endif %} {% endif %} {% if seomaticMeta.twitter is defined and seomaticMeta.twitter %} {% for key, value in seomaticMeta.twitter %} {% if value %} {% endif %} {% endfor %} {% endif %} {% if seomaticSocial.googlePlusHandle %} {% endif %} {% if seomaticHelper.ownerGoogleSiteVerification %} {% endif %} {% if seomaticHelper.ownerBingSiteVerification %} {% endif %} {{ craft.seomatic.renderIdentity() |raw }} {{ craft.seomatic.renderWebsite() |raw }} {{ craft.seomatic.renderPlace() |raw }} {{ craft.seomatic.renderMainEntityOfPage() |raw }} {{ craft.seomatic.renderBreadcrumbs() |raw }} {% if not craft.request.isLivePreview %}{{ craft.seomatic.renderGoogleTagManager() |raw }}{% else %}{% endif %} {% if not craft.config.devMode and not craft.request.isLivePreview %}{{ craft.seomatic.renderGoogleAnalytics() |raw }}{% else %}{% endif %} ================================================ FILE: templates/_seo_metaPreview.twig ================================================ {% if craft.config.devMode %}{{ seomaticSiteMeta.siteDevModeTitle }} {% endif %}{% if seomaticSiteMeta.siteSeoTitlePlacement == "before" %}{{ seomaticSiteMeta.siteSeoName |raw }}{% if seomaticMeta.seoTitle %} {{ seomaticSiteMeta.siteSeoTitleSeparator }} {% endif %}{% endif %}{{ seomaticMeta.seoTitle |raw }}{% if seomaticSiteMeta.siteSeoTitlePlacement == "after" %}{% if seomaticMeta.seoTitle %} {{ seomaticSiteMeta.siteSeoTitleSeparator }} {% endif %}{{ seomaticSiteMeta.siteSeoName |raw }}{% endif %} {% if seomaticMeta.robots is defined and seomaticMeta.robots %} {% endif %} {% if seomaticMeta.seoKeywords is defined and seomaticMeta.seoKeywords %} {% endif %} {% if seomaticMeta.seoDescription is defined and seomaticMeta.seoDescription %} {% endif %} {% if seomaticMeta.canonicalUrl |length %} {% endif %} {% set localizedUrls = getLocalizedUrls() %} {% if localizedUrls |length > 0 %} {% else %} {% endif %} {% if localizedUrls |length > 1 %} {% for key, value in localizedUrls %} {% endfor %} {% endif %} {% if seomaticIdentity.address.addressRegion is defined and seomaticIdentity.address.addressRegion %} {% endif %} {% if seomaticIdentity.location.geo.latitude is defined and seomaticIdentity.location.geo.latitude and seomaticIdentity.location.geo.longitude is defined and seomaticIdentity.location.geo.longitude %} {% endif %} {% if seomaticIdentity.location.name is defined and seomaticIdentity.location.name %} {% endif %} {% if seomaticCreator.name is defined and seomaticCreator.name %} {% endif %} {% if seomaticMeta.og is defined and seomaticMeta.og %} {% if seomaticSocial.facebookProfileId %} {% endif %} {% if seomaticSocial.facebookAppId %} {% endif %} {% for key, value in seomaticMeta.og %} {% if value %} {% if value is iterable %} {% for subvalue in value %} {% endfor %} {% else %} {% endif %} {% endif %} {% endfor %} {% if seomaticMeta.article is defined and seomaticMeta.article %} {% for key, value in seomaticMeta.article %} {% if value %} {% if value is iterable %} {% for subvalue in value %} {% endfor %} {% else %} {% endif %} {% endif %} {% endfor %} {% endif %} {% endif %} {% if seomaticMeta.twitter is defined and seomaticMeta.twitter %} {% for key, value in seomaticMeta.twitter %} {% if value %} {% endif %} {% endfor %} {% endif %} {% if seomaticSocial.googlePlusHandle %} {% endif %} {% if seomaticHelper.ownerGoogleSiteVerification %} {% endif %} {% if seomaticHelper.ownerBingSiteVerification %} {% endif %} {{ craft.seomatic.renderGoogleTagManager(null, null, true) |raw }} {{ craft.seomatic.renderGoogleAnalytics(null, null, true) |raw }} ================================================ FILE: templates/_seo_metrics.twig ================================================ {% includeCssResource "css/craft.css" %} {% includeJsResource "seomatic/js/jquery-2.2.4.min.js" %} {% includeCssResource "seomatic/css/seo-metrics-style.css" %} {% set checkmark = "✔" %} {% set xmark = "✗" %} {% set attentionmark = "!" %}

SEOmetrics

{# -- Focus Keywords section #} {% for keyword,keywordStats in keywords %} {% set totalStats = 0 %} {% set totalPassed = 0 %} {% if keyword |length %}
{% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {# -- The score tally -- #}
{{ "Focus Keyword"|t ~ ": " }}{{ keyword }}
{% if keywordStats.appearsInTitleTag >= 1 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Title Tag - The focus keyword {{ keyword }} {% if keywordStats.appearsInTitleTag >= 1 %} appears in the <title> tag.{% else %}does not appear in the <title> tag. Adding it to the <title> tag can influence search engines in ranking the page for this keyword.{% endif %}
{% if keywordStats.appearsInUrl >= 1 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} URL - The focus keyword {{ keyword }} {% if keywordStats.appearsInUrl >= 1 %} appears in the URL.{% else %}does not appear in the URL. Adding it to the URL can influence search engines in ranking the page for this keyword.{% endif %}
{% if keywordStats.appearsInMetaDescriptionTag >= 1 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Meta Description Tag - The focus keyword {{ keyword }} {% if keywordStats.appearsInMetaDescriptionTag >= 1 %} appears in the meta description tag.{% else %}does not appear in the meta description tag. Adding it to the meta description can influence search engines in ranking the page for this keyword.{% endif %}
{% if keywordStats.appearsInH1Tag >= 1 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Heading Tags - The focus keyword {{ keyword }} appears in <H1> or <H2> tags {{ keywordStats.appearsInH1Tag}} time{% if keywordStats.appearsInH1Tag != 1 %}s{% endif %}. {% if keywordStats.appearsInH1Tag >= 1 %}{% else %} Having it appear in <H1> or <H2> tags can influence search engines in ranking the page for this keyword.{% endif %}
{% if keywordStats.appearsInAhrefTag == 0 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Links to Other Pages - The focus keyword {{ keyword }} {% if keywordStats.appearsInAhrefTag == 0 %}does not appear in a link to another page; this is good.{% else %}appears in a link to another page; this can dilute the effectiveness of your keyword to search engines.{% endif %}
{% if keywordStats.appearsInImgTag >= 1 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Image ALT Tags - The focus keyword {{ keyword }} appears in <IMG ALT=""> attributes {{ keywordStats.appearsInImgTag}} time{% if keywordStats.appearsInImgTag != 1 %}s{% endif %}. {% if keywordStats.appearsInImgTag >= 1 %}{% else %} Having it appear in <IMG ALT=""> attributes can influence search engines in ranking the page for this keyword.{% endif %}
{% if keywordStats.appearsInPageKeywords >= 1 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Top Keywords - The focus keyword {{ keyword }} {% if keywordStats.appearsInPageKeywords >= 1 %} appears in the mostly highly ranked keywords extracted from the page.{% else %}does not appear in the mostly highly ranked keywords extracted from the page.{% endif %}
{% if keywordStats.appearsOnWebPage >= 3 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Keyword Frequency - The focus keyword {{ keyword }} appears on the page {{ keywordStats.appearsOnWebPage}} time{% if keywordStats.appearsOnWebPage != 1 %}s{% endif %}. {% if keywordStats.appearsOnWebPage >= 3 %}{% else %} Having it appear more times can influence search engines in ranking the page for this keyword.{% endif %}
{% set scorePercentile = ((totalPassed / totalStats) * 100) |number_format(0) %} {% if scorePercentile < 60 %} {% set scoreClass = "badscore" %} {{ checkmark |raw }} {% elseif scorePercentile < 80 %} {% set scoreClass = "attentionscore" %} {{ attentionmark |raw }} {% else %} {% set scoreClass = "goodscore" %} {{ checkmark |raw }} {% endif %}

Score: {{ scorePercentile }}%

{% endif %} {% endfor%} {# -- SEO Metrics section #} {% set totalStats = 0 %} {% set totalPassed = 0 %}
{% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% if pagespeedDesktopScore |length and pagespeedMobileScore |length %} {% set totalStats = totalStats + 1 %} {% set averageGPSIScore = ((pagespeedDesktopScore + pagespeedMobileScore) / 2) | number_format(0) %} {% set totalStats = totalStats + 1 %} {% else %} {% endif %} {% if pagespeedMobileUsability |length %} {% set totalStats = totalStats + 1 %} {% else %} {% endif %} {% if validatorStatus |length %} {% set totalStats = totalStats + 1 %} {% else %} {% endif %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {# -- The score tally -- #}
{{ "SEO Analysis"|t }}
{% if jsonLdTypes |length %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} JSON-LD Structured Data - {% if jsonLdTypes |length %} The following JSON-LD structured data was found on the page: {% for jsonLdType in jsonLdTypes%}{% if loop.last and loop.index0 != 0 %}& {% endif %}{{ jsonLdType }}{% if not loop.last%}, {% endif %}{% endfor %}, which is used by search engines to better understand the contents of your page. The JSON-LD structured data also has the potential to be added to the Google Knowledge Graph, or be used in Google Rich Cards.{% else %}This page does not include any JSON-LD structured data. This leaves search engines to guess at what the page is about. Modern SEO practice should include having structured data on your web pages.{% endif %} Learn More
{% if metaOpenGraphTag |length %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Facebook OpenGraph - {% if metaOpenGraphTag |length %} Great, this page includes Facebook OpenGraph meta tags of the type {{ metaOpenGraphTag }}, which will be used by Facebook when the URL is shared on Facebook.{% else %}This page does not include Facebook OpenGraph meta tags, they should be used so you can control what is displayed when the URL is shared on Facebook.{% endif %} Learn More
{% if metaTwitterTag |length %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Twitter Cards - {% if metaTwitterTag |length %} Great, this page includes Twitter Card meta tags of the type {{ metaTwitterTag }}, which will be attached to Tweets that include this URL.{% else %}This page does not include Twitter Card meta tags, so your content will not be displayed when this link is tweeted. Configure your Twitter handle in the SEOmatic Social tab.{% endif %} Learn More
{% if hasRelPublisherTag %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Google Publisher - link rel="publisher" {% if hasRelPublisherTag %}was detected. {% else %} was not detected. {% endif %}This tag is very important, because it affects whether your brand will be shown in Google SERP results. Learn More
{% if hasRobotsTxt %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Robots.txt - {% if hasRobotsTxt %}A robots.txt file was detected. robots.txt is a text file that instructs robots (typically search engine robots) how to crawl and index pages on the website.{% else %}A robots.txt file was not detected. robots.txt is a text file that instructs robots (typically search engine robots) how to crawl and index pages on the website.{% endif %} Learn More
{% if hasSitemap %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Sitemap - {% if hasSitemap %}A sitemap was detected. Search engine web crawlers like Googlebot read this file to more intelligently crawl your site.{% else %}A sitemap was not detected. Search engine web crawlers like Googlebot read this file to more intelligently crawl your site.{% endif %} Learn More
{% if pageSpeedPageStats.totalResponseBytes <= (1024 * 1024) %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Page Weight - Total page weight: {% if pageSpeedPageStats.totalResponseBytes <= (1024 * 1024) %}{% else %}{% endif %}{{ craft.seomatic.humanFileSize(pageSpeedPageStats.totalResponseBytes) }}, comprised of {{ craft.seomatic.humanFileSize(pageSpeedPageStats.htmlResponseBytes) }} HTML, {{ craft.seomatic.humanFileSize(pageSpeedPageStats.cssResponseBytes) }} CSS, {{ craft.seomatic.humanFileSize(pageSpeedPageStats.imageResponseBytes) }} Images, {{ craft.seomatic.humanFileSize(pageSpeedPageStats.javascriptResponseBytes) }} Javascript, & {{ craft.seomatic.humanFileSize(pageSpeedPageStats.otherResponseBytes) }} Other. The total weight (or size) of your webpage can affect loading times, which affects bounce rate. Ideally, keep it under 1MB (1024KB). Learn More
{% if averageGPSIScore >= 80 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Google PageSpeed Insights - Google Pagespeed Insights score: {% if pagespeedDesktopScore >= 80 %}{% else %}{% endif %}{{ pagespeedDesktopScore }}% Desktop, {% if pagespeedMobileScore >= 80 %}{% else %}{% endif %}{{ pagespeedMobileScore }}% Mobile. In addition to being important from a user experience point of view, your website's performance can affect its rankings on the Google search engine results page (SERP). Learn More
{{ attentionmark |raw }} Google PageSpeed Insights - Unable to determine Google Pagespeed Insights score. Is this a valid, publicly accessible URL? Learn More
{% if pagespeedMobileUsability >= 80 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Mobile Usability - Google Mobile Usability score: {% if pagespeedMobileUsability >= 80 %}{% else %}{% endif %}{{ pagespeedMobileUsability }}%. Users expect great mobile website experiences, and your website's mobile usability can affect its rankings on the Google search engine results page (SERP) for mobile searches. Learn More
{{ attentionmark |raw }} Mobile Usability - Unable to determine Google Mobile Usability score. Is this a valid, publicly accessible URL? Learn More
{% if validatorStatus == "Valid" %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} WC3 HTML Validity - WC3 HTML Validator status: {% if validatorStatus == "Valid" %}{% else %}{% endif %}{{ validatorStatus }}. Results: {{ validatorErrors }} errors, {{ validatorWarnings }} warnings. In addition to being important to ensure that your webpage displays properly, HTML validity can also affect web crawler's ability to parse and index your pages. Learn More
{{ attentionmark |raw }} WC3 HTML Validity - Unable to determine WC3 HTML validity. Is this a valid, publicly accessible URL? Learn More
{% if sslReturnCode == 200 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} HTTPS Encryption - {% if sslReturnCode == 200 %}This website is SSL encrypted via https. {% else %}This website is not SSL encrypted via https; consider using LetsEncrypt.org for a free SSL certficate. {% endif %} In addition to securing the connection, the use of https can result in an improved ranking on Google's Search Engine Results Page (SERP). Learn More
{% if titleLength >= 40 and titleLength <= 70 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Title Tag - The title tag {{ titleTag }} {% if titleLength < 40 %}may be too short; make sure it is descriptive, and unique on a per-page basis.{% elseif titleLength >70 %}may be too long, it will be truncated when displayed by search engines. Make sure it is unique on a per-page basis{% else %}is a good length; make sure it is unique on a per-page basis{% endif %}. Learn More
{% if metaDescriptionLength >= 70 and metaDescriptionLength <= 160 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Meta Description Tag - The meta description tag is {{ metaDescriptionLength }} characters long. {% if metaDescriptionLength < 70 %}This may be too short; make sure it is descriptive, contains your most important keywords, and is unique on a per-page basis.{% elseif metaDescriptionLength > 160 %} This may be too long, it will be truncated when being digested by search engines, or be considered "spammy" and be ignored. Make sure it is descriptive, contains your most important keywords, and is unique on a per-page basis.{% else %}This is a good length; make sure it is descriptive, contains your most important keywords, and is unique on a per-page basis.{% endif %} Learn More
{% if h1Tags == 1 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} H1 Tags - {% if h1Tags == 1 %}There is 1 <H1> tag on the page; make sure it describes the content effectively{% else %}There are {{ h1Tags }} <H1> tags on the page; there should be one and only one <H1> tag, which describes the content effectively.{% endif %} Learn More
{% if effectiveHTags %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Heading Tag Hierarchy - {% if effectiveHTags %}Heading tags are being used to effectively structure content on the page: {% else %}Heading tags are not being used to effectively structure content on the page. Make sure that there are no gaps in the heading hierarchy, and that headings are used appropriately:{% endif %} {{ h1Tags }} <H1>, {{ h2Tags }} <H2>, {{ h3Tags }} <H3>, {{ h4Tags }} <H4>, {{ h5Tags }} <H5>, Learn More
{% if emptyImageAlts == 0 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Image ALT Tags - {% if emptyImageAlts == 0 %}All of your <img> tags have alt attributes. Make sure they describe the images well.{% else %}There are {{ emptyImageAlts }} images on the page that do not have alt attributes. Search engines use alt attributes to help them understand the images, and they aid in accessibility as well. {% endif %} Learn More
{% if textToHtmlRatio > 25 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Text to HTML Ratio - {% if textToHtmlRatio > 25 %}The percentage of human-readable text on this page compared to HTML is {{ round(textToHtmlRatio, 2) }}%, which is above the recommended 25%. {% else %}The percentage of human-readable text on this page compared to HTML is {{ round(textToHtmlRatio, 2) }}%, which is below the recommended 25%. {% endif %} Learn More
{{ attentionmark |raw }} Top Keywords - Here are the top ranked keywords in the text on your page. Consider having some of these keywords in your <title> & <H1> tags, or alter your content to reflect the keywords in your tags: {{ pageKeywords |raw }}
{% set scorePercentile = ((totalPassed / totalStats) * 100) |number_format(0) %} {% if scorePercentile < 60 %} {% set scoreClass = "badscore" %} {{ checkmark |raw }} {% elseif scorePercentile < 80 %} {% set scoreClass = "attentionscore" %} {{ attentionmark |raw }} {% else %} {% set scoreClass = "goodscore" %} {{ checkmark |raw }} {% endif %}

Score: {{ scorePercentile }}%

{# -- Texual Analysis section #} {% set totalStats = 0 %} {% set totalPassed = 0 %}
{% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {% set totalStats = totalStats + 1 %} {# -- The score tally -- #}
{{ "Textual Analysis"|t }}
{% if wordCount >= 300 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Word Count - The text has {{ round(wordCount) }} words which is {% if wordCount >= 300 %}above{% else %}below{% endif %} the recommended 300 words.
{% if fleschKincaidReadingEase >= 50 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Flesch-Kincaid Reading Ease - The text scores {{ fleschKincaidReadingEase }} on the Flesch-Kincaid Reading Ease score, which makes it {% if fleschKincaidReadingEase >= 90 %}very easy to read. Easily understood by an average 11-year-old student. {% elseif fleschKincaidReadingEase >= 80 %}easy to read. Conversational English for consumers. {% elseif fleschKincaidReadingEase >= 70 %}fairly easy to read. {% elseif fleschKincaidReadingEase >= 60 %}plain English. Easily understood by 13- to 15-year-old students. {% elseif fleschKincaidReadingEase >= 50 %}fairly difficult to read. {% elseif fleschKincaidReadingEase >= 30 %}difficult to read. {% else %}very difficult to read. Best understood by university graduates. {% endif %}
{% if gunningFogScore <= 12 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Gunning Fog Index - The text is equivalent to a grade {{ round(gunningFogScore) }} reading level on the Gunning-fog index.
{% if colemanLiauIndex <= 12 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Coleman-Liau Index - The text is equivalent to a grade {{ round(colemanLiauIndex) }} reading level on the Coleman–Liau index.
{% if smogIndex <= 12 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} SMOG Index - The text is equivalent to a grade {{ round(smogIndex) }} reading level on the SMOG index.
{% if automatedReadabilityIndex <= 12 %}{% set totalPassed = totalPassed + 1 %}{{ checkmark |raw }}{% else %}{{ xmark |raw }}{% endif %} Automated Readability Index - The text is equivalent to a grade {{ round(automatedReadabilityIndex) }} reading level on the Automated readability index.
{{ attentionmark |raw }} Reading Time - The page has an approximate reading time of {{ readingTime }} minute{% if readingTime !=1 %}s{% endif %}.
{% set scorePercentile = ((totalPassed / totalStats) * 100) |number_format(0) %} {% if scorePercentile < 60 %} {% set scoreClass = "badscore" %} {{ checkmark |raw }} {% elseif scorePercentile < 80 %} {% set scoreClass = "attentionscore" %} {{ attentionmark |raw }} {% else %} {% set scoreClass = "goodscore" %} {{ checkmark |raw }} {% endif %}

Score: {{ scorePercentile }}%

================================================ FILE: templates/_seo_metrics_floater.twig ================================================
Analyze
================================================ FILE: templates/_seomatic_tabs.twig ================================================ {%- set tabs = { meta: { label: "SEO Template Meta"|t, url: url('seomatic/meta') }, identity: { label: "Site Identity"|t, url: url('seomatic/identity') }, social: { label: "Social Media"|t, url: url('seomatic/social') }, } -%} ================================================ FILE: templates/_twitterCardDisplayPreview.twig ================================================ {% if seomaticMeta.twitter is defined and seomaticMeta.twitter %} {% set lg = false %} {% if seomaticMeta.twitter.card == "summary_large_image" %} {% set lg = true %} {% endif %} {% else %}

Twitter Handle has not been set

{% endif %} ================================================ FILE: templates/creator/_edit.twig ================================================ {% extends "_layouts/cp" %} {% import '_includes/forms' as forms %} {% includeCssResource "css/entry.css" %} {% includeCssResource "seomatic/css/style.css" %} {% includeCssResource "seomatic/css/css-reset.css" %} {% includeCssResource "seomatic/css/prism.min.css" %} {% includeJsResource "seomatic/js/seomatic.js" %} {% includeJsResource "seomatic/js/type_list.js" %} {% includeJsResource "seomatic/js/creator.js" %} {% includeJsResource "seomatic/js/jquery.bpopup.min.js" %} {% includeJsResource "seomatic/js/prism.min.js" %} {% set title = craft.seomatic.getPluginName() %} {% set fullPageForm = true %} {% set hasCustomLayout = true %} {% set docsUrl = "https://github.com/nystudio107/seomatic/wiki" %} {% set localeUrlSuffix = "" %} {% if craft.isLocalized %} {% set localeUrlSuffix = "/" ~ creator.locale %} {% endif %} {% set seomaticSections = { seometrics: { label: "SEOmetrics"|t, url: url('seomatic/seometrics') }, meta: { label: "Template Meta"|t, url: url('seomatic/meta') }, site: { label: "Site Meta"|t, url: url('seomatic/site' ~ localeUrlSuffix ) }, identity: { label: "Site Identity"|t, url: url('seomatic/identity' ~ localeUrlSuffix ) }, social: { label: "Social Media"|t, url: url('seomatic/social' ~ localeUrlSuffix ) }, creator: { label: "Site Creator"|t, url: url('seomatic/creator' ~ localeUrlSuffix ) }, settings: { label: "Settings"|t, url: url('seomatic/settings') }, } %} {% set crumbs = [ { label: craft.seomatic.getPluginName(), url: url('seomatic') }, { label: "Site Creator"|t, url: url('seomatic/creator') }, ] %} {% if craft.app.version < 2.5 %} {% set tabs = seomaticSections %} {% set selectedTab = 'creator' %} {% else %} {% set subnav = seomaticSections %} {% set selectedSubnavItem = 'creator' %} {% endif %} {% block main %} {% include "seomatic/_preview_display_modal" with {'previewMetaPath': '', 'elementId': 0, 'locale': creator.locale } %} {% include "seomatic/_preview_tags_modal" with {'previewMetaPath': '', 'elementId': 0, 'locale': creator.locale } %} {% include "seomatic/_preview_humans_modal" %} {% if craft.app.version < 2.5 %}
{% endif %} {{ getCsrfInput() }}
{% if tabs is defined and tabs|length %} {% include "_includes/tabs" %} {% endif %}

{{ "Site Creator" |t }}

{{ forms.selectField({ first: true, label: "Site Creator Entity Type"|t, instructions: "The type of entity that created this website."|t, id: "siteCreatorType", options: { "Corporation": "Corporation"|t, "LocalBusiness": "Local Business"|t, "Organization": "Organization"|t, "Person": "Person"|t, }, name: "siteCreatorType", value: creator.siteCreatorType, required: true, locale: creator.locale, }) }}

{{ "General Info" |t }}

{{ forms.textField({ label: "Entity Name"|t, instructions: "The name of the entity that created the website" |t |raw, id: 'genericCreatorName', class: 'nicetext', name: 'genericCreatorName', value: creator.genericCreatorName, required: true, locale: creator.locale, }) }} {{ forms.textField({ label: "Alternate Entity Name"|t, instructions: "An alternate or nickname for the entity that created the website" |t |raw, id: 'genericCreatorAlternateName', class: 'nicetext', name: 'genericCreatorAlternateName', value: creator.genericCreatorAlternateName, required: false, locale: creator.locale, }) }}

{{ "A description of the entity that created the website" |t |raw}}

{{ forms.textarea({ label: "Entity Description"|t, instructions: "A description of the entity that created the website" |t |raw, id: 'genericCreatorDescription', class: 'nicetext', name: 'genericCreatorDescription', value: creator.genericCreatorDescription, maxlength: 1024, showCharsLeft: true, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Entity URL"|t, instructions: "A URL for the entity that created the website" |t |raw, id: 'genericCreatorUrl', class: 'nicetext', name: 'genericCreatorUrl', value: creator.genericCreatorUrl, required: false, locale: creator.locale, }) }}

{{ "An image or logo that represents the entity that created the website. The image must be in JPG, PNG, or GIF format." |t |raw}}

{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elementsCreatorImage, id: 'genericCreatorImageId', name: 'genericCreatorImageId', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: genericCreatorImageId, jsClass: 'Craft.AssetSelectInput', addButtonLabel: 'Select Brand Image', limit: 1, locale: creator.locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.textField({ label: "Entity Telephone"|t, instructions: "The primary contact telephone number for the entity that created the website" |t |raw, id: 'genericCreatorTelephone', class: 'nicetext', name: 'genericCreatorTelephone', value: creator.genericCreatorTelephone, required: false, locale: creator.locale, }) }} {{ forms.textField({ label: "Entity Email"|t, instructions: "The primary contact email address for the entity that created the website" |t |raw, id: 'genericCreatorEmail', class: 'nicetext', name: 'genericCreatorEmail', value: creator.genericCreatorEmail, required: false, locale: creator.locale, }) }}

{{ "Location Info" |t }}

  • {{ "No location found. Perhaps the address is wrong/incomplete?" |t }}
{{ forms.textField({ label: "Entity Street Address"|t, instructions: "The street address of the entity that created the website, e.g.: 575 Dunfrey Road" |t |raw, id: 'genericCreatorStreetAddress', class: 'nicetext', name: 'genericCreatorStreetAddress', value: creator.genericCreatorStreetAddress, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Entity Locality"|t, instructions: "The locality of the entity that created the website, e.g.: Lansing" |t |raw, id: 'genericCreatorAddressLocality', class: 'nicetext', name: 'genericCreatorAddressLocality', value: creator.genericCreatorAddressLocality, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Entity Region"|t, instructions: "The region of the entity that created the website, e.g.: Michigan or MI" |t |raw, id: 'genericCreatorAddressRegion', class: 'nicetext', name: 'genericCreatorAddressRegion', value: creator.genericCreatorAddressRegion, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Entity Postal Code"|t, instructions: "The postal code of the entity that created the website, e.g.: 11360" |t |raw, id: 'genericCreatorPostalCode', class: 'nicetext', name: 'genericCreatorPostalCode', value: creator.genericCreatorPostalCode, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Entity Country"|t, instructions: "The country in which the entity that created the website is located, e.g.: US" |t |raw, id: 'genericCreatorAddressCountry', class: 'nicetext', name: 'genericCreatorAddressCountry', value: creator.genericCreatorAddressCountry, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Entity Latitude"|t, instructions: "The latitude of the location of the entity that created the website, e.g.: -120.5436367" |t |raw, id: 'genericCreatorGeoLatitude', class: 'nicetext', name: 'genericCreatorGeoLatitude', value: creator.genericCreatorGeoLatitude, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Entity Longitude"|t, instructions: "The longitude of the location of the entity that created the website, e.g.: 80.6033588" |t |raw, id: 'genericCreatorGeoLongitude', class: 'nicetext', name: 'genericCreatorGeoLongitude', value: creator.genericCreatorGeoLongitude, required: false, locale: creator.locale, }) }}

{{ "Organization Info" |t }}

{{ forms.textField({ label: "Organization DUNS Number"|t, instructions: "The DUNS (Dunn & Bradstreet) number of the organization/company that created the website" |t |raw, id: 'organizationCreatorDuns', class: 'nicetext', name: 'organizationCreatorDuns', value: creator.organizationCreatorDuns, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Organization Founder"|t, instructions: "The name of the founder of the organization/company" |t |raw, id: 'organizationCreatorFounder', class: 'nicetext', name: 'organizationCreatorFounder', value: creator.organizationCreatorFounder, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Organization Founding Date"|t, instructions: "The date the organization/company was founded" |t |raw, id: 'organizationCreatorFoundingDate', class: 'nicetext', name: 'organizationCreatorFoundingDate', value: creator.organizationCreatorFoundingDate, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Organization Founding Location"|t, instructions: "The location where the organization/company was founded" |t |raw, id: 'organizationCreatorFoundingLocation', class: 'nicetext', name: 'organizationCreatorFoundingLocation', value: creator.organizationCreatorFoundingLocation, required: false, locale: creator.locale, }) }}

{{ "Organization Contact Points" |t }}

{{ "Use organization contact points to add your organizations's contact information to the Google Knowledge panel in some searches. The Telephone Number must be an internationalized version of the phone number, starting with the '+' symbol and country code (+1 in the US and Canada). e.g.: +1-800-555-1212 or +44-2078225951" |t |raw}}

{{ forms.editableTable({ id: 'organizationCreatorContactPoints', name: 'organizationCreatorContactPoints', required: false, cols: { telephone: { heading: "Telephone Number" |t, type: "singleline" |t, }, contactType: { heading: "Contact Type" |t, type: "select" |t, options: { "customer support": "Customer Support", "technical support": "Technical Support", "billing support": "Billing Support", "bill payment": "Bill Payment", "sales": "Sales", "reservations": "Reservations", "credit card support": "Credit Card Support", "emergency": "Emergency", "baggage tracking": "Baggage Tracking", "roadside assistance": "Roadside Assistance", "package tracking": "Package Tracking", } } }, rows: creator.organizationCreatorContactPoints, locale: creator.locale, }) }}

{{ "Corporation Info" |t }}

{{ forms.textField({ label: "Corporation Ticker Symbol"|t, instructions: "The exchange ticker symbol of the corporation" |t |raw, id: 'corporationCreatorTickerSymbol', class: 'nicetext', name: 'corporationCreatorTickerSymbol', value: creator.corporationCreatorTickerSymbol, required: false, locale: creator.locale, }) }}

{{ "Person Info" |t }}

{{ forms.selectField({ label: "Person Gender"|t, instructions: "The gender of the person" |t |raw, id: 'personCreatorGender', class: 'nicetext', options: { "Male": "Male"|t, "Female": "Female"|t, "Other": "Other"|t, }, name: 'personCreatorGender', value: creator.personCreatorGender, required: false, locale: creator.locale, }) }}
{{ forms.textField({ label: "Person Birth Place"|t, instructions: "The place where the person was born" |t |raw, id: 'personCreatorBirthPlace', class: 'nicetext', name: 'personCreatorBirthPlace', value: creator.personCreatorBirthPlace, required: false, locale: creator.locale, }) }}

{{ "Humans.txt" |t }}

{{ "

Humans.txt is an initiative for knowing the people behind a website. It's a TXT file that contains information about the different people who have contributed to building the website. By adding a txt file, you can prove your authorship (not your property) in an external, fast, easy and accessible way.

This is the template used to render it; you have access to all of the Craft & SEOmatic variables.

This is a full Twig template, so you should use standard {{ myVariable }} or {% set woof = dog.bark %} Twig syntax. Environmental variables must be accessed via {{ craft.config.environmentVariables.myVariable }}

" |t |raw }}
{{ forms.textarea({ label: "Humans.txt Template"|t, instructions: "A description of the entity that created the website" |t |raw, id: 'genericCreatorHumansTxt', class: 'nicetext codeStyle', name: 'genericCreatorHumansTxt', value: creator.genericCreatorHumansTxt, required: false, rows: 15, locale: creator.locale, }) }}

 

{{ "

You can use any Craft environmentVariables in these fields in addition to static text, e.g.:
This is my {baseUrl}

" |t |raw }}

{{ "Preview SEO Meta Display" |t }}
{{ "Preview SEO Meta Tags" |t }}
{% if craft.isLocalized %}
    {% for locale in craft.i18n.getSiteLocales() %} {% if locale == creator.locale %}
  • {{ locale.name }}
  • {% else %}
  • {{ locale.name }}
  • {% endif %} {% endfor %}
  • {{ "If any field is left blank for a setting in a particular locale, it will fall back on the primary locale." |t |raw }}

{% endif %}
{{ "

These Site Creator settings are used to globally define & attribute the creator of the website. The creator is the company/individual that developed the website.

They are used in combination with the SEO Template Meta & SEO Entry Meta settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

The Site Creator information is referenced in the WebSite JSON-LD schema that is used to identity the website to search engines.

Leave any fields blank that aren't applicable or which you do not want as part of the SEO schema.

" |t |raw }}
{{ "Preview Humans.txt" |t }}
{% if craft.app.version < 2.5 %}
{% endif %}
{% if craft.app.version < 2.5 %}
{% endif %} {% endblock %} ================================================ FILE: templates/field.twig ================================================ {% import "_includes/forms" as forms %} {% set locale = craft.isLocalized() ? (element ? element.locale : craft.locale) %} {% set someUrl = getFullyQualifiedUrl(element.url) | default(siteUrl) %} {% include "seomatic/_preview_display_modal" with {'previewMetaPath': '', 'locale': locale } %} {% include "seomatic/_preview_tags_modal" with {'previewMetaPath': '', 'elementId': elementId, 'locale': locale } %}
SEOmatic Meta
{{ "Preview SEO Meta Display" |t }}
{{ "Preview SEO Meta Tags" |t }}

{{ "The Main Entity of Page is a more specific, additional type that describes this entry. This additional JSON-LD structured data entity will be added to your page, more specifically describing the page's content. It is accessible via the seomaticMainEntityOfPage Twig variable, should you wish to modify or add to it" |t |raw}}

{{ forms.selectField({ id: id ~ "seoMainEntityCategory", class: "inline-item", fieldClass: "inline-item", options: { "CreativeWork": "CreativeWork", "Event": "Event", "Organization": "Organization", "Person": "Person", "Product": "Product", }, name: name ~ "[seoMainEntityCategory]", value: meta.seoMainEntityCategory, locale: field.translatable ? locale, }) }}
{{ forms.selectField({ label: "→", class: "inline-item", fieldClass: "inline-item", id: id ~ "seoMainEntityOfPage", options: { }, name: name ~ "[seoMainEntityOfPage]", value: meta.seoMainEntityOfPage, locale: field.translatable ? locale, }) }}
{% set myJs %} setSelectedValue("{{ meta.seoMainEntityOfPage }}"); {% endset %} {% includeJs myJs %}

{{ "The SEO Title should be between 10 and 70 characters (spaces included). Make sure your title tag is explicit and contains your most important keywords. Be sure that each page has a unique title tag. The siteSeoName length is subtracted from the 70 character limit automatically, since it is appended to the seoTitle." |t |raw}}

{{ forms.selectField({ fieldClass: 'nomarginfield', id: id ~ "seoTitleSourceField", options: fieldList, name: name ~ "[seoTitleSourceField]", value: meta.seoTitleSourceField, locale: field.translatable ? locale, }) }}

{{ "You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below." |t |raw}}

{{ forms.textField({ fieldClass: 'nomarginfield', id: id ~ 'seoTitle', class: 'nicetext', name: name ~ '[seoTitleUnparsed]', value: meta.seoTitleUnparsed, errors: meta.getErrors('seoTitleUnparsed'), maxlength: titleLength, showCharsLeft: true, required: false, locale: field.translatable ? locale, }) }}

{{ "The SEO Description should be between 70 and 160 characters (spaces included). Meta descriptions allow you to influence how your web pages are described and displayed in search results. Ensure that all of your web pages have a unique meta description that is explicit and contains your most important keywords." |t |raw}}

{{ forms.selectField({ fieldClass: 'nomarginfield', id: id ~ "seoDescriptionSourceField", options: fieldList, name: name ~ "[seoDescriptionSourceField]", value: meta.seoDescriptionSourceField, locale: field.translatable ? locale, }) }}

{{ "You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below." |t |raw}}

{{ forms.textarea({ id: id ~ 'seoDescription', fieldClass: 'nomarginfield', class: 'nicetext', name: name ~ '[seoDescriptionUnparsed]', value: meta.seoDescriptionUnparsed, errors: meta.getErrors('seoDescriptionUnparsed'), maxlength: 160, showCharsLeft: true, required: false, locale: field.translatable ? locale, }) }}

{{ "Google ignores the SEO Keywords tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on." |t |raw}}

{{ forms.selectField({ fieldClass: 'nomarginfield', id: id ~ "seoKeywordsSourceField", options: fieldList, name: name ~ "[seoKeywordsSourceField]", value: meta.seoKeywordsSourceField, locale: field.translatable ? locale, }) }}

{{ "You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below." |t |raw}}

{{ forms.textarea({ id: id ~ 'seoKeywords', class: 'nicetext', name: name ~ '[seoKeywordsUnparsed]', value: meta.seoKeywordsUnparsed, errors: meta.getErrors('seoKeywordsUnparsed'), maxlength: 200, showCharsLeft: true, required: false, locale: field.translatable ? locale, }) }}

{{ "This is the image that will be used for display as the webpage brand for this entry, as well as on Twitter Cards and Facebook OpenGraph that link to this page, if they are not specified. The image must be in JPG, PNG, or GIF format." |t |raw}}

{{ forms.selectField({ fieldClass: 'nomarginfield', id: id ~ "seoImageIdSourceField", options: imageFieldList, name: name ~ "[seoImageIdSourceField]", value: meta.seoImageIdSourceField, locale: field.translatable ? locale, }) }}
Image Preview
{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elements, id: id ~ 'seoImageId', name: name ~ '[seoImageId]', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: seoImageId, sources: assetSources, jsClass: 'Craft.AssetSelectInput', addButtonLabel: "Select SEO Image" |t, limit: 1, locale: field.translatable ? locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.selectField({ label: "SEO Image Transform"|t, instructions: "The image transform to apply to the Site SEO Image."|t, id: id ~ "seoImageTransform", options: transformsList, name: name ~ "[seoImageTransform]", value: meta.seoImageTransform, locale: field.translatable ? locale, }) }}
{{ forms.textField({ fieldClass: 'nomarginfield', id: id ~ 'canonicalUrlOverride', class: 'nicetext', name: name ~ '[canonicalUrlOverride]', label: "Canonical URL Override"|t, instructions: "The canonical URL is automatically set to the entry's URL. This allows you to override the canonical URL if you need to; this can be a path or a fully qualified URL. Just leave it blank for the canonical URL to be set automatically."|t, value: meta.canonicalUrlOverride, errors: meta.getErrors('canonicalUrlOverride'), showCharsLeft: false, required: false, locale: field.translatable ? locale, }) }}

{{ "This is the image that will be used for display on Twitter Cards for tweets that link to this entry. If no image is specified here, the Site SEO Image will be used for Twitter Cards instead. The image must be in JPG, PNG, or GIF format." |t |raw}}

{{ forms.selectField({ fieldClass: 'nomarginfield', id: id ~ "seoTwitterImageIdSourceField", options: imageFieldList, name: name ~ "[seoTwitterImageIdSourceField]", value: meta.seoTwitterImageIdSourceField, locale: field.translatable ? locale, }) }}
Image Preview
{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elementsTwitter, id: id ~ 'seoTwitterImageId', name: name ~ '[seoTwitterImageId]', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: seoTwitterImageId, sources: assetSources, jsClass: 'Craft.AssetSelectInput', addButtonLabel: "Select Twitter Card Image" |t, limit: 1, locale: field.translatable ? locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.selectField({ label: "Twitter Card Image Transform"|t, instructions: "The image transform to apply to the Twitter Card Image. Twitter recommends: 120 x 120 pixels minimum size, 1:1 aspect ratio, 1mb max size for Summary Card images, and 280x150 pixels minimum size, 1.86:1 aspect ratio, 1mb max size for Summary Card with Large Image images."|t, id: id ~ "seoTwitterImageTransform", options: transformsList, name: name ~ "[seoTwitterImageTransform]", value: meta.seoTwitterImageTransform, locale: field.translatable ? locale, }) }}

{{ "This is the image that will be used for display on Facebook posts that link to this entry. If no image is specified here, the Site SEO Image will be used for Facebook posts instead. The image must be in JPG, PNG, or GIF format." |t |raw}}

{{ forms.selectField({ fieldClass: 'nomarginfield', id: id ~ "seoFacebookImageIdSourceField", options: imageFieldList, name: name ~ "[seoFacebookImageIdSourceField]", value: meta.seoFacebookImageIdSourceField, locale: field.translatable ? locale, }) }}
Image Preview
{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elementsFacebook, id: id ~ 'seoFacebookImageId', name: name ~ '[seoFacebookImageId]', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: seoFacebookImageId, sources: assetSources, jsClass: 'Craft.AssetSelectInput', addButtonLabel: "Select Facebook OpenGraph Image" |t, limit: 1, locale: field.translatable ? locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.selectField({ label: "Facebook OpenGraph Image Transform"|t, instructions: "The image transform to apply to the Facebook OpenGraph Image. Facebook recommends: 1200 x 630 pixels minimum size, 1.9:1 aspect ratio, 8mb max size."|t, id: id ~ "seoFacebookImageTransform", options: transformsList, name: name ~ "[seoFacebookImageTransform]", value: meta.seoFacebookImageTransform, locale: field.translatable ? locale, }) }}
================================================ FILE: templates/field_settings.twig ================================================ {% import "_includes/forms" as forms %}
{% if assetSources %} {{ forms.checkboxSelectField({ label: "Asset Sources"|t, instructions: "Which sources do you want to select assets from?"|t, id: 'assetSources', name: 'assetSources', options: assetSources, values: settings.assetSources })}} {% else %} {{ forms.field({ label: "Asset Sources"|t, }, '

' ~ "No asset sources exist yet."|t ~ '

') }} {% endif %}

{{ "Default Main Entity of Page. The Main Entity of Page is a more specific, additional type that describes this entry. This additional JSON-LD structured data entity will be added to your page, more specifically describing the page's content. It is accessible via the seomaticMainEntityOfPage Twig variable, should you wish to modify or add to it" |t |raw}}

{{ forms.selectField({ id: "seoMainEntityCategory", class: "inline-item", fieldClass: "inline-item", options: { "CreativeWork": "CreativeWork", "Event": "Event", "Organization": "Organization", "Person": "Person", "Product": "Product", }, name: "seoMainEntityCategory", value: settings.seoMainEntityCategory, }) }}
{{ forms.selectField({ label: "→", class: "inline-item", fieldClass: "inline-item", id: "seoMainEntityOfPage", options: { }, name: "seoMainEntityOfPage", value: settings.seoMainEntityOfPage, }) }}
{% set myJs %} setSelectedValue("{{ settings.seoMainEntityOfPage }}"); {% endset %} {% includeJs myJs %}

{{ "Set what the SEO Title should default to for each entry." |t |raw}}

{{ "Source" |t }}

{{ forms.selectField({ fieldClass: 'nomarginfield', class: 'selectField', id: 'seoTitleSource', options: { "custom": "Custom Text"|t, "field": "From Field"|t, }, name: 'seoTitleSource', value: settings.seoTitleSource, }) }}
{{ forms.selectField({ fieldClass: 'nomarginfield', id: 'seoTitleSourceField', options: fieldList, name: 'seoTitleSourceField', value: settings.seoTitleSourceField, }) }}

{{ "You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below." |t |raw}}

{{ forms.textField({ fieldClass: 'nomarginfield', id: 'seoTitle', class: 'nicetext', name: 'seoTitle', value: settings.seoTitle, maxlength: titleLength, showCharsLeft: true, required: false, }) }}
{{ forms.lightswitchField({ label: "SEO Title Source Changeable"|t, name: 'seoTitleSourceChangeable', instructions: "Whether to allow the user to change the SEO Title source while editing the entry"|t, on: settings.seoTitleSourceChangeable, }) }}

{{ "Set what the SEO Description should default to for each entry." |t |raw}}

{{ "Source" |t }}

{{ forms.selectField({ fieldClass: 'nomarginfield', class: 'selectField', id: 'seoDescriptionSource', options: { "custom": "Custom Text"|t, "field": "From Field"|t, }, name: 'seoDescriptionSource', value: settings.seoDescriptionSource, }) }}
{{ forms.selectField({ fieldClass: 'nomarginfield', id: 'seoDescriptionSourceField', options: fieldList, name: 'seoDescriptionSourceField', value: settings.seoDescriptionSourceField, }) }}

{{ "You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below." |t |raw}}

{{ forms.textarea({ id: 'seoDescription', fieldClass: 'nomarginfield', class: 'nicetext', name: 'seoDescription', value: settings.seoDescription, maxlength: 160, showCharsLeft: true, required: false, }) }}
{{ forms.lightswitchField({ label: "SEO Description Source Changeable"|t, name: 'seoDescriptionSourceChangeable', instructions: "Whether to allow the user to change the SEO Description source while editing the entry"|t, on: settings.seoDescriptionSourceChangeable, }) }}

{{ "Set what the SEO Keywords should default to for each entry." |t |raw}}

{{ "Source" |t }}

{{ forms.selectField({ fieldClass: 'nomarginfield', class: 'selectField', id: 'seoKeywordsSource', options: { "custom": "Custom Text"|t, "field": "From Field"|t, "keywords": "Keywords From Field"|t, }, name: 'seoKeywordsSource', value: settings.seoKeywordsSource, }) }}
{{ forms.selectField({ fieldClass: 'nomarginfield', id: 'seoKeywordsSourceField', options: fieldList, name: 'seoKeywordsSourceField', value: settings.seoKeywordsSourceField, }) }}

{{ "You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below." |t |raw}}

{{ forms.textarea({ id: 'seoKeywords', class: 'nicetext', name: 'seoKeywords', value: settings.seoKeywords, maxlength: 200, showCharsLeft: true, required: false, }) }}
{{ forms.lightswitchField({ label: "SEO Keywords Source Changeable"|t, name: 'seoKeywordsSourceChangeable', instructions: "Whether to allow the user to change the SEO Keywords source while editing the entry"|t, on: settings.seoKeywordsSourceChangeable, }) }}

{{ "Set what the SEO Image should default to for each entry. This image is also used for Twitter Cards and Facebook OpenGraph images, if they are not specified. The image must be in JPG, PNG, or GIF format." |t |raw}}

{{ "Source" |t }}

{{ forms.selectField({ fieldClass: 'nomarginfield', class: 'selectField', id: 'seoImageIdSource', options: { "custom": "Custom Image"|t, "field": "From Field"|t, }, name: 'seoImageIdSource', value: settings.seoImageIdSource, }) }}
{{ forms.selectField({ fieldClass: 'nomarginfield', id: 'seoImageIdSourceField', options: imageFieldList, name: 'seoImageIdSourceField', value: settings.seoImageIdSourceField, }) }}
{{ forms.lightswitchField({ label: "SEO Image Source Changeable"|t, name: 'seoImageIdSourceChangeable', instructions: "Whether to allow the user to change the SEO Image source while editing the entry"|t, on: settings.seoImageIdSourceChangeable, }) }}
{{ forms.selectField({ label: "Default SEO Image Transform"|t, instructions: "Set the default image transform to apply to the Site SEO Image."|t, id: "seoImageTransform", options: transformsList, name: "seoImageTransform", value: settings.seoImageTransform, }) }} {{ forms.selectField({ label: "Default Twitter Card Type"|t, instructions: "Set what the Twitter Card Type should default to for each entry. Setting it to a blank value means 'no change'."|t, id: "twitterCardType", options: { "": "", "summary": "Summary Card"|t, "summary_large_image": "Summary Card with Large Image"|t, }, name: "twitterCardType", value: settings.twitterCardType, }) }} {{ forms.lightswitchField({ label: "Twitter Card Type Changeable"|t, name: 'twitterCardTypeChangeable', instructions: "Whether to allow the user to change the Twitter Card Type while editing the entry"|t, on: settings.twitterCardTypeChangeable, }) }}

{{ "Set what the Twitter Card Image should default to for each entry. If no image is specified here, the Site SEO Image will be used for Twitter Cards instead. The image must be in JPG, PNG, or GIF format." |t |raw}}

{{ "Source" |t }}

{{ forms.selectField({ fieldClass: 'nomarginfield', class: 'selectField', id: 'seoTwitterImageIdSource', options: { "custom": "Custom Image"|t, "field": "From Field"|t, }, name: 'seoTwitterImageIdSource', value: settings.seoTwitterImageIdSource, }) }}
{{ forms.selectField({ fieldClass: 'nomarginfield', id: 'seoTwitterImageIdSourceField', options: imageFieldList, name: 'seoTwitterImageIdSourceField', value: settings.seoTwitterImageIdSourceField, }) }}
{{ forms.lightswitchField({ label: "Twitter Card Image Source Changeable"|t, name: 'seoTwitterImageIdSourceChangeable', instructions: "Whether to allow the user to change the Twitter Card Image source while editing the entry"|t, on: settings.seoTwitterImageIdSourceChangeable, }) }}
{{ forms.selectField({ label: "Default Twitter Image Transform"|t, instructions: "Set the default image transform to apply to the Twitter SEO Image. Twitter recommends: 120 x 120 pixels minimum size, 1:1 aspect ratio, 1mb max size for Summary Card images, and 280x150 pixels minimum size, 1.86:1 aspect ratio, 1mb max size for Summary Card with Large Image images."|t, id: "seoTwitterImageTransform", options: transformsList, name: "seoTwitterImageTransform", value: settings.seoTwitterImageTransform, }) }} {{ forms.selectField({ label: "Default Facebook Open Graph Type"|t, instructions: "Set what the Facebook Open Graph Type should default to for each entry. Setting it to a blank value means 'no change'."|t, id: "openGraphType", options: { "": "", "website": "Website"|t, "article": "Article"|t, }, name: "openGraphType", value: settings.openGraphType, }) }} {{ forms.lightswitchField({ label: "Facebook Open Graph Type Changeable"|t, name: 'openGraphTypeChangeable', instructions: "Whether to allow the user to change the Facebook Open Graph Type while editing the entry"|t, on: settings.openGraphTypeChangeable, }) }}

{{ "Set what the Facebook OpenGraph Image should default to for each entry. If no image is specified here, the Site SEO Image will be used for Twitter Cards instead. The image must be in JPG, PNG, or GIF format." |t |raw}}

{{ "Source" |t }}

{{ forms.selectField({ fieldClass: 'nomarginfield', class: 'selectField', id: 'seoFacebookImageIdSource', options: { "custom": "Custom Image"|t, "field": "From Field"|t, }, name: 'seoFacebookImageIdSource', value: settings.seoFacebookImageIdSource, }) }}
{{ forms.selectField({ fieldClass: 'nomarginfield', id: 'seoFacebookImageIdSourceField', options: imageFieldList, name: 'seoFacebookImageIdSourceField', value: settings.seoFacebookImageIdSourceField, }) }}
{{ forms.lightswitchField({ label: "Facebook OpenGraph Image Source Changeable"|t, name: 'seoFacebookImageIdSourceChangeable', instructions: "Whether to allow the user to change the Facebook OpenGraph Image source while editing the entry"|t, on: settings.seoFacebookImageIdSourceChangeable, }) }}
{{ forms.selectField({ label: "Default Facebook Image Transform"|t, instructions: "Set the default image transform to apply to the Facebook SEO Image. Facebook recommends: 1200 x 630 pixels minimum size, 1.9:1 aspect ratio, 8mb max size."|t, id: "seoFacebookImageTransform", options: transformsList, name: "seoFacebookImageTransform", value: settings.seoFacebookImageTransform, }) }} {{ forms.selectField({ label: "Default Robots Meta Tag"|t, instructions: "Set what the Robots Meta Tag should default to for each entry. Setting it to a blank value means 'no change'."|t, id: "robots", options: { "": "", "all": "all - Index this page and follow links (default)" |t, "noindex": "noindex - Do not index this page" |t, "nofollow": "nofollow - Do not follow links on this page" |t, "none": "none - Do not index or follow links on this page" |t, }, name: "robots", value: settings.robots, }) }} {{ forms.lightswitchField({ label: "Robots Meta Tag Changeable"|t, name: 'robotsChangeable', instructions: "Whether to allow the user to change the Robots Meta Tag while editing the entry"|t, on: settings.robotsChangeable, }) }}
================================================ FILE: templates/identity/_edit.twig ================================================ {% extends "_layouts/cp" %} {% import '_includes/forms' as forms %} {% includeCssResource "css/entry.css" %} {% includeCssResource "seomatic/css/style.css" %} {% includeCssResource "seomatic/css/css-reset.css" %} {% includeCssResource "seomatic/css/prism.min.css" %} {% includeJsResource "seomatic/js/seomatic.js" %} {% includeJsResource "seomatic/js/type_list.js" %} {% includeJsResource "seomatic/js/identity.js" %} {% includeJsResource "seomatic/js/jquery.bpopup.min.js" %} {% includeJsResource "seomatic/js/prism.min.js" %} {% set title = craft.seomatic.getPluginName() %} {% set fullPageForm = true %} {% set hasCustomLayout = true %} {% set docsUrl = "https://github.com/nystudio107/seomatic/wiki" %} {% set localeUrlSuffix = "" %} {% if craft.isLocalized %} {% set localeUrlSuffix = "/" ~ identity.locale %} {% endif %} {% set seomaticSections = { seometrics: { label: "SEOmetrics"|t, url: url('seomatic/seometrics') }, meta: { label: "Template Meta"|t, url: url('seomatic/meta') }, site: { label: "Site Meta"|t, url: url('seomatic/site' ~ localeUrlSuffix ) }, identity: { label: "Site Identity"|t, url: url('seomatic/identity' ~ localeUrlSuffix ) }, social: { label: "Social Media"|t, url: url('seomatic/social' ~ localeUrlSuffix ) }, creator: { label: "Site Creator"|t, url: url('seomatic/creator' ~ localeUrlSuffix ) }, settings: { label: "Settings"|t, url: url('seomatic/settings') }, } %} {% set crumbs = [ { label: craft.seomatic.getPluginName(), url: url('seomatic') }, { label: "Site Identity"|t, url: url('seomatic/identity') }, ] %} {% if craft.app.version < 2.5 %} {% set tabs = seomaticSections %} {% set selectedTab = 'identity' %} {% else %} {% set subnav = seomaticSections %} {% set selectedSubnavItem = 'identity' %} {% endif %} {% block main %} {% include "seomatic/_preview_display_modal" with {'previewMetaPath': '', 'elementId': 0, 'locale': identity.locale } %} {% include "seomatic/_preview_tags_modal" with {'previewMetaPath': '', 'elementId': 0, 'locale': identity.locale } %} {% if craft.app.version < 2.5 %}
{% endif %} {{ getCsrfInput() }}
{% if tabs is defined and tabs|length %} {% include "_includes/tabs" %} {% endif %}

{{ "Site Ownership" |t }}

{{ forms.textField({ label: "Google Site Verification"|t, instructions: "For the <meta name='google-site-verification'> tag. Only enter the code in the content='', not the entire tag. Here's how to get it." |t |raw, id: 'googleSiteVerification', class: 'nicetext', name: 'googleSiteVerification', value: identity.googleSiteVerification, required: false, locale: identity.locale, }) }} {{ forms.textField({ label: "Bing Site Verification"|t, instructions: "For the <meta name='msvalidate.01'> tag. Only enter the code in the content='', not the entire tag. Here's how to get it." |t |raw, id: 'bingSiteVerification', class: 'nicetext', name: 'bingSiteVerification', value: identity.bingSiteVerification, required: false, locale: identity.locale, }) }} {{ forms.textField({ label: "Google Tag Manager ID"|t, instructions: "If you enter your Google Tag Manager ID here, the Google Tag Manager script tags will be included in your <head> (the script is not included if devMode is on or during Live Preview). Only enter the ID, e.g.: GTM-XXXXXX, not the entire script code. Here's how to get it." |t |raw, id: 'googleTagManagerID', class: 'nicetext', name: 'googleTagManagerID', value: identity.googleTagManagerID, required: false, locale: identity.locale, }) }} {{ forms.textField({ label: "Google Analytics Tracking ID"|t, instructions: "If you enter your Google Analytics Tracking ID here, the Google Analytics script tags will be included in your <head> (the script is not included if devMode is on or during Live Preview). Only enter the ID, e.g.: UA-XXXXXX-XX, not the entire script code. Here's how to get it." |t |raw, id: 'googleAnalyticsUID', class: 'nicetext', name: 'googleAnalyticsUID', value: identity.googleAnalyticsUID, required: false, locale: identity.locale, }) }} {{ forms.lightswitchField({ label: "Automatically send Google Analytics PageView"|t, instructions: "Controls whether the Google Analytics script automatically sends a PageView to Google Analytics when your pages are loaded" |t |raw, id: 'googleAnalyticsSendPageview', name: 'googleAnalyticsSendPageview', on: identity.googleAnalyticsSendPageview, }) }} {{ forms.lightswitchField({ label: "Google Analytics IP Anonymization"|t, instructions: "When a customer of Analytics requests IP address anonymization, Analytics anonymizes the address as soon as technically feasible at the earliest possible stage of the collection network" |t |raw, id: 'googleAnalyticsAnonymizeIp', name: 'googleAnalyticsAnonymizeIp', on: identity.googleAnalyticsAnonymizeIp, }) }}

{{ "Select which Google Analytics plugins to enable. Learn More" |t |raw}}

{{ forms.lightswitchField({ id: 'googleAnalyticsAdvertising', name: 'googleAnalyticsAdvertising', class: "inline-item", fieldClass: "inline-item", on: identity.googleAnalyticsAdvertising, }) }}
{{ forms.lightswitchField({ id: 'googleAnalyticsEcommerce', name: 'googleAnalyticsEcommerce', class: "inline-item", fieldClass: "inline-item", on: identity.googleAnalyticsEcommerce, }) }}
{{ forms.lightswitchField({ id: 'googleAnalyticsEEcommerce', name: 'googleAnalyticsEEcommerce', class: "inline-item", fieldClass: "inline-item", on: identity.googleAnalyticsEEcommerce, }) }}
{{ forms.lightswitchField({ id: 'googleAnalyticsLinkAttribution', name: 'googleAnalyticsLinkAttribution', class: "inline-item", fieldClass: "inline-item", on: identity.googleAnalyticsLinkAttribution, }) }}
{{ forms.lightswitchField({ id: 'googleAnalyticsLinker', name: 'googleAnalyticsLinker', class: "inline-item", fieldClass: "inline-item", on: identity.googleAnalyticsLinker, }) }}

{{ "The type of entity that owns this website. Choose as general or specific of an Entity Type as you wish. Leave a sub-type blank if you don't want to specify a sub-type." |t |raw}}

{{ forms.selectField({ id: "siteOwnerType", class: "inline-item", fieldClass: "inline-item", options: { "Organization": "Organization"|t, "Person": "Person"|t, }, name: "siteOwnerType", value: identity.siteOwnerType, required: true, locale: identity.locale, }) }}
{{ forms.selectField({ id: "siteOwnerSubType", label: "→", class: "inline-item", fieldClass: "inline-item", options: { "": "", "Airline": "Airline"|t, "Corporation": "Corporation"|t, "EducationalOrganization": "Educational Organization"|t, "GovernmentOrganization": "Government Organization"|t, "LocalBusiness": "Local Business"|t, "NGO": "Non-Government Organization"|t, "PerformingGroup": "Performing Group"|t, "SportsOrganization": "Sports Organization"|t, }, name: "siteOwnerSubType", value: identity.siteOwnerSubType, required: false, locale: identity.locale, }) }}
{{ forms.selectField({ id: "siteOwnerSpecificType", label: "→", class: "inline-item", fieldClass: "inline-item", options: { }, name: "siteOwnerSpecificType", value: identity.siteOwnerSpecificType, required: false, locale: identity.locale, }) }}
{% set myJs %} setSelectedValue("{{ identity.siteOwnerSpecificType }}"); {% endset %} {% includeJs myJs %}

{{ "General Info" |t }}

{{ forms.textField({ label: "Entity Name"|t, instructions: "The name of the entity that owns the website" |t |raw, id: 'genericOwnerName', class: 'nicetext', name: 'genericOwnerName', value: identity.genericOwnerName, required: true, locale: identity.locale, }) }} {{ forms.textField({ label: "Alternate Entity Name"|t, instructions: "An alternate or nickname for the entity that owns the website" |t |raw, id: 'genericOwnerAlternateName', class: 'nicetext', name: 'genericOwnerAlternateName', value: identity.genericOwnerAlternateName, required: false, locale: identity.locale, }) }}

{{ "A description of the entity that owns the website" |t |raw}}

{{ forms.textarea({ label: "Entity Description"|t, instructions: "A description of the entity that owns the website" |t |raw, id: 'genericOwnerDescription', class: 'nicetext', name: 'genericOwnerDescription', value: identity.genericOwnerDescription, maxlength: 1024, showCharsLeft: true, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Entity URL"|t, instructions: "A URL for the entity that owns the website" |t |raw, id: 'genericOwnerUrl', class: 'nicetext', name: 'genericOwnerUrl', value: identity.genericOwnerUrl, required: false, locale: identity.locale, }) }}

{{ "An image or logo that represents the entity that owns the website. The image must be in JPG, PNG, or GIF format." |t |raw}}

{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elementsOwnerImage, id: 'genericOwnerImageId', name: 'genericOwnerImageId', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: genericOwnerImageId, jsClass: 'Craft.AssetSelectInput', addButtonLabel: "Select Brand Image" |t, limit: 1, locale: identity.locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.textField({ label: "Entity Telephone"|t, instructions: "The primary contact telephone number for the entity that owns the website" |t |raw, id: 'genericOwnerTelephone', class: 'nicetext', name: 'genericOwnerTelephone', value: identity.genericOwnerTelephone, required: false, locale: identity.locale, }) }} {{ forms.textField({ label: "Entity Email"|t, instructions: "The primary contact email address for the entity that owns the website" |t |raw, id: 'genericOwnerEmail', class: 'nicetext', name: 'genericOwnerEmail', value: identity.genericOwnerEmail, required: false, locale: identity.locale, }) }}

{{ "Location Info" |t }}

{{ forms.textField({ label: "Entity Street Address"|t, instructions: "The street address of the entity that owns the website, e.g.: 123 Main Street" |t |raw, id: 'genericOwnerStreetAddress', class: 'nicetext', name: 'genericOwnerStreetAddress', value: identity.genericOwnerStreetAddress, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Entity Locality"|t, instructions: "The locality of the entity that owns the website, e.g.: Portchester" |t |raw, id: 'genericOwnerAddressLocality', class: 'nicetext', name: 'genericOwnerAddressLocality', value: identity.genericOwnerAddressLocality, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Entity Region"|t, instructions: "The region of the entity that owns the website, e.g.: New York or NY" |t |raw, id: 'genericOwnerAddressRegion', class: 'nicetext', name: 'genericOwnerAddressRegion', value: identity.genericOwnerAddressRegion, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Entity Postal Code"|t, instructions: "The postal code of the entity that owns the website, e.g.: 14580" |t |raw, id: 'genericOwnerPostalCode', class: 'nicetext', name: 'genericOwnerPostalCode', value: identity.genericOwnerPostalCode, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Entity Country"|t, instructions: "The country in which the entity that owns the website is located, e.g.: US" |t |raw, id: 'genericOwnerAddressCountry', class: 'nicetext', name: 'genericOwnerAddressCountry', value: identity.genericOwnerAddressCountry, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Entity Latitude"|t, instructions: "The latitude of the location of the entity that owns the website, e.g.: -120.5436367" |t |raw, id: 'genericOwnerGeoLatitude', class: 'nicetext', name: 'genericOwnerGeoLatitude', value: identity.genericOwnerGeoLatitude, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Entity Longitude"|t, instructions: "The longitude of the location of the entity that owns the website, e.g.: 80.6033588" |t |raw, id: 'genericOwnerGeoLongitude', class: 'nicetext', name: 'genericOwnerGeoLongitude', value: identity.genericOwnerGeoLongitude, required: false, locale: identity.locale, }) }}
  • {{ "No location found. Perhaps the address is wrong/incomplete?" |t }}

{{ "Person Info" |t }}

{{ forms.selectField({ label: "Person Gender"|t, instructions: "The gender of the person" |t |raw, id: 'personOwnerGender', class: 'nicetext', options: { "Male": "Male"|t, "Female": "Female"|t, "Other": "Other"|t, }, name: 'personOwnerGender', value: identity.personOwnerGender, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Person Birth Place"|t, instructions: "The place where the person was born" |t |raw, id: 'personOwnerBirthPlace', class: 'nicetext', name: 'personOwnerBirthPlace', value: identity.personOwnerBirthPlace, required: false, locale: identity.locale, }) }}

{{ "Organization Info" |t }}

{{ forms.textField({ label: "Organization DUNS Number"|t, instructions: "The DUNS (Dunn & Bradstreet) number of the organization/company/restaurant that owns the website" |t |raw, id: 'organizationOwnerDuns', class: 'nicetext', name: 'organizationOwnerDuns', value: identity.organizationOwnerDuns, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Organization Founder"|t, instructions: "The name of the founder of the organization/company/restaurant" |t |raw, id: 'organizationOwnerFounder', class: 'nicetext', name: 'organizationOwnerFounder', value: identity.organizationOwnerFounder, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Organization Founding Date"|t, instructions: "The date the organization/company/restaurant was founded" |t |raw, id: 'organizationOwnerFoundingDate', class: 'nicetext', name: 'organizationOwnerFoundingDate', value: identity.organizationOwnerFoundingDate, required: false, locale: identity.locale, }) }}
{{ forms.textField({ label: "Organization Founding Location"|t, instructions: "The location where the organization/company/restaurant was founded" |t |raw, id: 'organizationOwnerFoundingLocation', class: 'nicetext', name: 'organizationOwnerFoundingLocation', value: identity.organizationOwnerFoundingLocation, required: false, locale: identity.locale, }) }}

{{ "Organization Contact Points" |t }}

{{ "Use organization contact points to add your organizations's contact information to the Google Knowledge panel in some searches. The Telephone Number must be an internationalized version of the phone number, starting with the '+' symbol and country code (+1 in the US and Canada). e.g.: +1-800-555-1212 or +44-2078225951" |t |raw}}

{{ forms.editableTable({ id: 'organizationOwnerContactPoints', name: 'organizationOwnerContactPoints', required: false, cols: { telephone: { heading: "Telephone Number" |t, type: "singleline" |t, }, contactType: { heading: "Contact Type" |t, type: "select" |t, options: { "customer support": "Customer Support", "technical support": "Technical Support", "billing support": "Billing Support", "bill payment": "Bill Payment", "sales": "Sales", "reservations": "Reservations", "credit card support": "Credit Card Support", "emergency": "Emergency", "baggage tracking": "Baggage Tracking", "roadside assistance": "Roadside Assistance", "package tracking": "Package Tracking", } } }, rows: identity.organizationOwnerContactPoints, locale: identity.locale, }) }}

{{ "Corporation Info" |t }}

{{ forms.textField({ label: "Corporation Ticker Symbol"|t, instructions: "The exchange ticker symbol of the corporation" |t |raw, id: 'corporationOwnerTickerSymbol', class: 'nicetext', name: 'corporationOwnerTickerSymbol', value: identity.corporationOwnerTickerSymbol, required: false, locale: identity.locale, }) }}

{{ "Local Business Info" |t }}

{{ forms.selectField({ label: "Price Range"|t, instructions: "The approximate price range of the goods or services offered by this local business."|t, id: "localBusinessPriceRange", options: { "$": "$", "$$": "$$", "$$$": "$$$", "$$$$": "$$$$", "$$$$$": "$$$$$", }, name: "localBusinessPriceRange", value: identity.localBusinessPriceRange, locale: identity.locale, }) }}

{{ "The opening hours for this local business. If the business is closed on a given day, just leave the hours for that day blank. If you leave everything blank, no opening hours will be listed." |t |raw}}

{% macro day(id, name, value, day) %} {% from "_includes/forms" import time %} {{ craft.i18n.getLocaleData().getWeekDayName(day) }} {{ time({ id: id~'-'~day~'-open', name: name~'['~day~'][open]', value: value ? value[day].open }) }} {{ time({ id: id~'-'~day~'-close', name: name~'['~day~'][close]', value: value ? value[day].close }) }} {% endmacro %} {% from _self import day %} {% set localeData = craft.i18n.getLocaleData() %} {% for i in 0..6 %} {{ day('localBusinessOwnerOpeningHours', 'localBusinessOwnerOpeningHours', identity.localBusinessOwnerOpeningHours, i) }} {% endfor %}
Opening Time Closing Time

{{ "Food Establishment Info" |t }}

{{ forms.textField({ label: "Food Establishment Cuisine"|t, instructions: "The primary type of cuisine that the food establishment serves" |t |raw, id: 'restaurantOwnerServesCuisine', class: 'nicetext', name: 'restaurantOwnerServesCuisine', value: identity.restaurantOwnerServesCuisine, required: false, locale: identity.locale, }) }} {{ forms.textField({ label: "Food Establishment Menu URL"|t, instructions: "URL to the food establishment's menu" |t |raw, id: 'restaurantOwnerMenuUrl', class: 'nicetext', name: 'restaurantOwnerMenuUrl', value: identity.restaurantOwnerMenuUrl, required: false, locale: identity.locale, }) }} {{ forms.textField({ label: "Food Establishment Reservations URL"|t, instructions: "URL to the food establishment's reservations page" |t |raw, id: 'restaurantOwnerReservationsUrl', class: 'nicetext', name: 'restaurantOwnerReservationsUrl', value: identity.restaurantOwnerReservationsUrl, required: false, locale: identity.locale, }) }}

 

{{ "

You can use any Craft environmentVariables in these fields in addition to static text, e.g.:
This is my {baseUrl}

" |t |raw }}

{{ "Preview SEO Meta Display" |t }}
{{ "Preview SEO Meta Tags" |t }}
{% if craft.isLocalized %}
    {% for locale in craft.i18n.getSiteLocales() %} {% if locale == identity.locale %}
  • {{ locale.name }}
  • {% else %}
  • {{ locale.name }}
  • {% endif %} {% endfor %}
  • {{ "If any field is left blank for a setting in a particular locale, it will fall back on the primary locale." |t |raw }}

{% endif %}
{{ "

These Site Identity settings are used to globally define the identity and ownership of the website.

They are used in combination with the SEO Template Meta & SEO Entry Meta settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

The Site Owner type determines the JSON-LD schema that will be used to identity the website to search engines.

Leave any fields blank that aren't applicable or which you do not want as part of the SEO schema.

" |t |raw }}
{% if craft.app.version < 2.5 %}
{% endif %}
{% if craft.app.version < 2.5 %}
{% endif %} {% endblock %} ================================================ FILE: templates/index.twig ================================================ {% redirect url('seomatic/seometrics') %} ================================================ FILE: templates/json-ld/_json-ld.twig ================================================ {# -------------------------------------------------------------------------------- This is rendered via -------------------------------------------------------------------------------- #} {% set level = 0 %} ================================================ FILE: templates/json-ld/_json-ld_core.twig ================================================ {% for key,value in object %} {% if value is iterable %}{% if value|keys|first=="0" %}{%for i in 0..level %} {% endfor %}"{{ key |raw }}": [{% for subValue in value %}{% if subValue is iterable %} {%for i in 0..level+1 %} {% endfor %}{ {% include 'json-ld/_json-ld_core' with {'object': subValue, 'level': (level + 2) } only %} {%for i in 0..level+1 %} {% endfor %}}{% if not loop.last%},{% else %} {%for i in 0..level %} {% endfor %} {% endif %}{% else %}"{{ subValue |raw }}"{% if not loop.last%},{% endif %}{% endif %}{% endfor %}]{% else %}{%for i in 0..level %} {% endfor %}"{{ key |raw }}": { {% include 'json-ld/_json-ld_core' with {'object': value, 'level': (level + 1) } only %}{%for i in 0..level %} {% endfor %}}{% endif %}{% else %}{%for i in 0..level %} {% endfor %}"{% if key == "type" %}@{% endif %}{{ key |raw }}": "{{ value |raw }}"{% endif %}{% if not loop.last %}, {% else %} {% endif %} {% endfor %} ================================================ FILE: templates/meta/_edit.twig ================================================ {% extends '_layouts/cp' %} {% import '_includes/forms' as forms %} {% includeCssResource "css/entry.css" %} {% includeCssResource "seomatic/css/style.css" %} {% includeCssResource "seomatic/css/css-reset.css" %} {% includeCssResource "seomatic/css/prism.min.css" %} {% includeCssResource "seomatic/css/bootstrap-tokenfield.css" %} {% includeJsResource "seomatic/js/seomatic.js" %} {% includeJsResource "seomatic/js/jquery.bpopup.min.js" %} {% includeJsResource "seomatic/js/bootstrap-tokenfield.min.js" %} {% includeJsResource "seomatic/js/prism.min.js" %} {% includeJsResource "seomatic/js/main_entity_type_list.js" %} {% includeJsResource "seomatic/js/meta.js" %} {% set fullPageForm = true %} {% set docsUrl = "https://github.com/nystudio107/seomatic/wiki" %} {% set seomaticSections = { seometrics: { label: "SEOmetrics"|t, url: url('seomatic/seometrics') }, meta: { label: "Template Meta"|t, url: url('seomatic/meta') }, site: { label: "Site Meta"|t, url: url('seomatic/site') }, identity: { label: "Site Identity"|t, url: url('seomatic/identity') }, social: { label: "Social Media"|t, url: url('seomatic/social') }, creator: { label: "Site Creator"|t, url: url('seomatic/creator') }, settings: { label: "Settings"|t, url: url('seomatic/settings') }, } %} {% set crumbs = [ { label: craft.seomatic.getPluginName(), url: url('seomatic') }, { label: "Template Meta"|t, url: url('seomatic/meta') }, { label: "Edit"|t, url: url(craft.request.url) }, ] %} {% if craft.app.version < 2.5 %} {% set tabs = seomaticSections %} {% set selectedTab = 'meta' %} {% else %} {% set subnav = seomaticSections %} {% set selectedSubnavItem = 'meta' %} {% endif %} {% block main %} {% if meta.metaType == "default" %} {% include "seomatic/_preview_display_modal" with {'previewMetaPath': '', 'elementId': 0} %} {% include "seomatic/_preview_tags_modal" with {'previewMetaPath': '', 'elementId': 0, } %} {% else %} {% include "seomatic/_preview_display_modal" with {'previewMetaPath': meta.metaPath, 'elementId': 0, 'locale': meta.locale } %} {% include "seomatic/_preview_tags_modal" with {'previewMetaPath': meta.metaPath, 'elementId': 0, 'locale': meta.locale } %} {% endif %}
{% if craft.app.version < 2.5 %}
{% endif %} {{ getCsrfInput() }} {% if meta.id %}{% endif %}
{% if tabs is defined and tabs|length %} {% include "_includes/tabs" %} {% endif %} {% include "seomatic/meta/_main" %}

 

{{ "

You can use any Craft environmentVariables in these fields in addition to static text, e.g.:
This is my {baseUrl}

" |t |raw }}

{{ "Preview SEO Meta Display" |t }}
{{ "Preview SEO Meta Tags" |t }}
{% if craft.isLocalized %}
    {% for locale in craft.i18n.getSiteLocales() %} {% if locale == meta.locale %}
  • {{ locale.name }}
  • {% else %} {% if meta.id %} {% set metaSegment = meta.id %} {% else %} {% set metaSegment = "new" %} {% endif %}
  • {#{{ locale.name }}#}{{ locale.name }}
  • {% endif %} {% endfor %}
  • {{ "If any field is left blank for a setting in a particular locale, it will fall back on the primary locale." |t |raw }}

{% endif %}
{{ "

These SEO Meta settings are used to render the SEO Meta for the website. You can create any number of SEO Template Metas associated with your Twig templates on the website.

They are used in combination with the Site Identity & Social Media settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

If a no Template Meta exists for a template, the SEO Site Meta is used.

If any fields are left blank in a Template Meta, those fields are pulled from the SEO Site Meta.

You can also dynamically change the seomaticMeta.* variables in your Twig templates, and they will appear in the rendered SEO Meta.

" |t |raw }}
{% if meta.id and meta.metaType != "default" %}
{% endif %}
{% if craft.app.version < 2.5 %}
{% endif %}
{% if craft.app.version < 2.5 %}
{% endif %}
{% endblock %} ================================================ FILE: templates/meta/_main.twig ================================================ {{ forms.textField({ label: "Title"|t, id: 'title', class: 'nicetext', name: 'title', value: meta.title, errors: meta.getErrors('title'), first: true, autofocus: true, required: true, locale: meta.locale, }) }} {{ forms.textField({ label: "Template Path"|t, instructions: "Enter the path to the template to associate this meta with (just as you would on the Section settings). It will override the SEO Site Meta for this template. Leave any field blank if you want it to fall back on the default global settings for that field." |t |raw, id: 'metaPath', class: 'nicetext', name: 'metaPath', value: meta.metaPath, errors: meta.getErrors('metaPath'), required: true, locale: meta.locale, }) }}

{{ "The Main Entity of Page is a more specific, additional type that describes this page. This additional JSON-LD structured data entity will be added to your page, more specifically describing the page's content. It is accessible via the seomaticMainEntityOfPage Twig variable, should you wish to modify or add to it." |t |raw}}

{{ forms.selectField({ id: "seoMainEntityCategory", class: "inline-item", fieldClass: "inline-item", options: { "CreativeWork": "CreativeWork", "Event": "Event", "Organization": "Organization", "Person": "Person", "Product": "Product", }, name: "seoMainEntityCategory", value: meta.seoMainEntityCategory, locale: meta.locale, }) }}
{{ forms.selectField({ label: "→", class: "inline-item", fieldClass: "inline-item", id: "seoMainEntityOfPage", options: { }, name: "seoMainEntityOfPage", value: meta.seoMainEntityOfPage, locale: meta.locale, }) }}
{% set myJs %} setSelectedValue("{{ meta.seoMainEntityOfPage }}"); {% endset %} {% includeJs myJs %} {{ forms.textField({ label: "SEO Title"|t, instructions: "The SEO Title should be between 10 and 70 characters (spaces included). Make sure your title tag is explicit and contains your most important keywords. Be sure that each page has a unique title tag. The siteSeoName length is subtracted from the 70 character limit automatically, since it is appended to the seoTitle.

You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below." |t |raw, id: 'seoTitle', class: 'nicetext', name: 'seoTitle', value: meta.seoTitle, errors: meta.getErrors('seoTitle'), maxlength: titleLength, showCharsLeft: true, required: false, locale: meta.locale, }) }}

{{ "The SEO Description should be between 70 and 160 characters (spaces included). Meta descriptions allow you to influence how your web pages are described and displayed in search results. Ensure that all of your web pages have a unique meta description that is explicit and contains your most important keywords.

You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below." |t |raw}}

{{ forms.textarea({ id: 'seoDescription', class: 'nicetext', name: 'seoDescription', value: meta.seoDescription, errors: meta.getErrors('seoDescription'), maxlength: 160, showCharsLeft: true, required: false, locale: meta.locale, }) }}

{{ "Google ignores SEO Keywords tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on.

You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below." |t |raw}}

{{ forms.textarea({ label: "SEO Keywords"|t, instructions: "Google ignores this tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on.

You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below." |t |raw, id: 'seoKeywords', class: 'nicetext', name: 'seoKeywords', value: meta.seoKeywords, errors: meta.getErrors('seoKeywords'), maxlength: 200, showCharsLeft: true, required: false, locale: meta.locale, }) }}

{{ "This is the image that will be used for display as the webpage brand for this template, as well as on Twitter Cards and Facebook OpenGraph that link to this page, if they are not specified. The image must be in JPG, PNG, or GIF format." |t |raw}}

{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elements, id: 'seoImageId', name: 'seoImageId', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: seoImageId, jsClass: 'Craft.AssetSelectInput', addButtonLabel: "Select SEO Image" |t, limit: 1, locale: meta.locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.selectField({ label: "SEO Image Transform"|t, instructions: "The image transform to apply to the Site SEO Image."|t, id: "seoImageTransform", options: transformsList, name: "seoImageTransform", value: meta.seoImageTransform, locale: meta.locale, }) }} {{ forms.selectField({ first: true, label: "Twitter Card Type"|t, instructions: "With Twitter Cards, you can attach rich photos and information to Tweets that drive traffic to your website. Users who Tweet links to your content will have a “Card” added to the Tweet that’s visible to all of their followers. Setting it to a blank value means 'no change'."|t, id: "twitterCardType", options: { "": "", "summary": "Summary Card"|t, "summary_large_image": "Summary Card with Large Image"|t, }, name: "twitterCardType", value: meta.twitterCardType, locale: meta.locale, }) }}

{{ "This is the image that will be used for Twitter Cards that link to this page. If no image is specified here, the Site SEO Image will be used for Twitter Cards instead. The image must be in JPG, PNG, or GIF format." |t |raw}}

{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elementsTwitter, id: 'seoTwitterImageId', name: 'seoTwitterImageId', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: seoTwitterImageId, jsClass: 'Craft.AssetSelectInput', addButtonLabel: "Select Twitter Card Image" |t, limit: 1, locale: meta.locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.selectField({ label: "Twitter Card Image Transform"|t, instructions: "The image transform to apply to the Twitter Card Image. Twitter recommends: 120 x 120 pixels minimum size, 1:1 aspect ratio, 1mb max size for Summary Card images, and 280x150 pixels minimum size, 1.86:1 aspect ratio, 1mb max size for Summary Card with Large Image images."|t, id: "seoTwitterImageTransform", options: transformsList, name: "seoTwitterImageTransform", value: meta.seoTwitterImageTransform, locale: meta.locale, }) }} {{ forms.selectField({ first: true, label: "Facebook OpenGraph Type"|t, instructions: "Adding OpenGraph tags to your website influences the performance of your links on social media by allowing you to control what appears when a user posts a link to your content on Facebook. Setting it to a blank value means 'no change'."|t, id: "openGraphType", options: { "": "", "website": "Website"|t, "article": "Article"|t, }, name: "openGraphType", value: meta.openGraphType, locale: meta.locale, }) }}

{{ "This is the image that will be used for Facebook posts that link to this page. If no image is specified here, the Site SEO Image will be used for Facebook posts instead. The image must be in JPG, PNG, or GIF format." |t |raw}}

{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elementsFacebook, id: 'seoFacebookImageId', name: 'seoFacebookImageId', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: seoFacebookImageId, jsClass: 'Craft.AssetSelectInput', addButtonLabel: "Select Facebook OpenGraph Image" |t, limit: 1, locale: meta.locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.selectField({ label: "Facebook Image Transform"|t, instructions: "The image transform to apply to the Facebook OpenGraph Image. Facebook recommends: 1200 x 630 pixels minimum size, 1.9:1 aspect ratio, 8mb max size."|t, id: "seoFacebookImageTransform", options: transformsList, name: "seoFacebookImageTransform", value: meta.seoFacebookImageTransform, locale: meta.locale, }) }} {{ forms.selectField({ label: "Robots Meta Tag"|t, instructions: "The robots meta tag lets you utilize a granular, page-specific approach to controlling how an individual page should be indexed and served to users in search results. Setting it to a blank value means 'no change'."|t, id: "robots", options: { "": "", "all": "all - Index this page and follow links (default)" |t, "noindex": "noindex - Do not index this page" |t, "nofollow": "nofollow - Do not follow links on this page" |t, "none": "none - Do not index or follow links on this page" |t, }, name: "robots", value: meta.robots, locale: meta.locale, }) }} ================================================ FILE: templates/meta/_sidebar.twig ================================================ {{ forms.lightswitchField({ label: "Enabled"|t, instructions: 'Set to "0" for unlimited views.'|t, name: 'enabled', on: meta.enabled, }) }} ================================================ FILE: templates/meta/index.twig ================================================ {% extends '_layouts/elementindex' %} {% includeCssResource "seomatic/css/style.css" %} {% includeJsResource "seomatic/js/metalist.js" %} {% set title = craft.seomatic.getPluginName() %} {% set elementType = 'Seomatic_Meta' %} {% set docsUrl = "https://github.com/nystudio107/seomatic/wiki" %} {% set seomaticSections = { seometrics: { label: "SEOmetrics"|t, url: url('seomatic/seometrics') }, meta: { label: "Template Meta"|t, url: url('seomatic/meta') }, site: { label: "Site Meta"|t, url: url('seomatic/site') }, identity: { label: "Site Identity"|t, url: url('seomatic/identity') }, social: { label: "Social Media"|t, url: url('seomatic/social') }, creator: { label: "Site Creator"|t, url: url('seomatic/creator') }, settings: { label: "Settings"|t, url: url('seomatic/settings') }, } %} {% set crumbs = [ { label: craft.seomatic.getPluginName(), url: url('seomatic') }, { label: "Template Meta"|t, url: url('seomatic/meta') }, ] %} {% if craft.app.version < 2.5 %} {% set tabs = seomaticSections %} {% set selectedTab = 'meta' %} {% else %} {% set subnav = seomaticSections %} {% set selectedSubnavItem = 'meta' %} {% endif %} {% block sidebar %}
{{ "New Template Meta"|t }}
{{ parent() }} {% endblock %} ================================================ FILE: templates/seometrics.twig ================================================ {% import "_includes/forms" as forms %} {% extends "_layouts/cp" %} {% import '_includes/forms' as forms %} {% set title = craft.seomatic.getPluginName() %} {% set docsUrl = "https://github.com/nystudio107/seomatic/wiki" %} {% set seomaticSections = { seometrics: { label: "SEOmetrics"|t, url: url('seomatic/seometrics') }, meta: { label: "Template Meta"|t, url: url('seomatic/meta') }, site: { label: "Site Meta"|t, url: url('seomatic/site') }, identity: { label: "Site Identity"|t, url: url('seomatic/identity') }, social: { label: "Social Media"|t, url: url('seomatic/social') }, creator: { label: "Site Creator"|t, url: url('seomatic/creator') }, settings: { label: "Settings"|t, url: url('seomatic/settings') }, } %} {% set crumbs = [ { label: craft.seomatic.getPluginName(), url: url('seomatic') }, { label: "SEOmetrics"|t, url: url('seomatic/seometrics') }, ] %} {% if craft.app.version < 2.5 %} {% set tabs = seomaticSections %} {% set selectedTab = 'seometrics' %} {% else %} {% set subnav = seomaticSections %} {% set selectedSubnavItem = 'seometrics' %} {% endif %} {% set content %} {% set urlToAnalyze = siteUrl %}

{{ "SEOmetrics Content Analysis" |t }}

{{ ("SEOmetrics Content Analysis will run a variety of tests on your web page, and offer you analysis with helpful tips on how to correct any problems it finds. For Craft Entries/Sections, you can access SEOmetrics for specific pages via Live Preview by clicking on the SEOmetrics badge:") |t |raw }}

{{ "Enter any URL below to analyze. You can enter Focus Keyworks, comma separated, for an additional analysis of how well optimized your page is for those specific SEO keywords." |t |raw }}

Analyze
{% endset %} {% set js %} // load_metrics(); document.getElementById("seomatic-metrics-keywords") .addEventListener("keyup", function(event) { event.preventDefault(); if (event.keyCode == 13) { document.getElementById("seomatic-metrics-analyze").click(); } }); document.getElementById("seomatic-metrics-url") .addEventListener("keyup", function(event) { event.preventDefault(); if (event.keyCode == 13) { document.getElementById("seomatic-metrics-analyze").click(); } }); function load_metrics() { var floaterDiv = document.getElementById('seomatic-metrics-content'); var whichUrl = document.getElementById('seomatic-metrics-url').value; var whichKeywords = document.getElementById('seomatic-metrics-keywords').value; var dataUrl = Craft.getActionUrl('seomatic/renderMetrics', {url: whichUrl, keywords: whichKeywords}); document.getElementById("seomatic-metrics-content-inner").innerHTML=''; $('#seometrics-spinner').show(); $('#iFrame1').load(function(){ var iFrame = document.getElementById( 'iFrame1' ); resizeIFrameToFitContent(iFrame); $('#seometrics-spinner').hide(); }); } function resizeIFrameToFitContent( iFrame ) { iFrame.width = iFrame.contentWindow.document.body.scrollWidth; iFrame.height = iFrame.contentWindow.document.body.scrollHeight; } $( window ).resize(function() { var iFrame = document.getElementById( 'iFrame1' ); resizeIFrameToFitContent(iFrame); }); {% endset %} {% includeJs js %} ================================================ FILE: templates/settings.twig ================================================ {% import "_includes/forms" as forms %} {% extends "_layouts/cp" %} {% import '_includes/forms' as forms %} {% set title = craft.seomatic.getPluginName() %} {% set fullPageForm = true %} {% set docsUrl = "https://github.com/nystudio107/seomatic/wiki" %} {% set seomaticSections = { seometrics: { label: "SEOmetrics"|t, url: url('seomatic/seometrics') }, meta: { label: "Template Meta"|t, url: url('seomatic/meta') }, site: { label: "Site Meta"|t, url: url('seomatic/site') }, identity: { label: "Site Identity"|t, url: url('seomatic/identity') }, social: { label: "Social Media"|t, url: url('seomatic/social') }, creator: { label: "Site Creator"|t, url: url('seomatic/creator') }, settings: { label: "Settings"|t, url: url('seomatic/settings') }, } %} {% set crumbs = [ { label: craft.seomatic.getPluginName(), url: url('seomatic') }, { label: "Settings"|t, url: url('seomatic/settings') }, ] %} {% if craft.app.version < 2.5 %} {% set tabs = seomaticSections %} {% set selectedTab = 'settings' %} {% else %} {% set subnav = seomaticSections %} {% set selectedSubnavItem = 'settings' %} {% endif %} {% set content %} {% if craft.app.version < 2.5 %}
{% endif %} {{ getCsrfInput() }} {{ forms.textField({ label: "Plugin Name"|t, instructions: "The plugin name as you'd like it to be displayed in the AdminCP."|t, id: 'pluginNameOverride', name: 'settings[pluginNameOverride]', value: settings.pluginNameOverride, autofocus: true, first: true, }) }} {% if craft.app.version < 2.5 %}
{% endif %} {% if craft.app.version < 2.5 %}
{% endif %} {% endset %} ================================================ FILE: templates/site/_edit.twig ================================================ {% extends "_layouts/cp" %} {% import '_includes/forms' as forms %} {% includeCssResource "css/entry.css" %} {% includeCssResource "seomatic/css/style.css" %} {% includeCssResource "seomatic/css/css-reset.css" %} {% includeCssResource "seomatic/css/prism.min.css" %} {% includeCssResource "seomatic/css/bootstrap-tokenfield.css" %} {% includeJsResource "seomatic/js/seomatic.js" %} {% includeJsResource "seomatic/js/jquery.bpopup.min.js" %} {% includeJsResource "seomatic/js/prism.min.js" %} {% includeJsResource "seomatic/js/bootstrap-tokenfield.min.js" %} {% includeJsResource "seomatic/js/site.js" %} {% set title = craft.seomatic.getPluginName() %} {% set fullPageForm = true %} {% set hasCustomLayout = true %} {% set docsUrl = "https://github.com/nystudio107/seomatic/wiki" %} {% set localeUrlSuffix = "" %} {% if craft.isLocalized %} {% set localeUrlSuffix = "/" ~ siteMeta.locale %} {% endif %} {% set seomaticSections = { seometrics: { label: "SEOmetrics"|t, url: url('seomatic/seometrics') }, meta: { label: "Template Meta"|t, url: url('seomatic/meta') }, site: { label: "Site Meta"|t, url: url('seomatic/site' ~ localeUrlSuffix ) }, identity: { label: "Site Identity"|t, url: url('seomatic/identity' ~ localeUrlSuffix ) }, social: { label: "Social Media"|t, url: url('seomatic/social' ~ localeUrlSuffix ) }, creator: { label: "Site Creator"|t, url: url('seomatic/creator' ~ localeUrlSuffix ) }, settings: { label: "Settings"|t, url: url('seomatic/settings') }, } %} {% set crumbs = [ { label: craft.seomatic.getPluginName(), url: url('seomatic') }, { label: "Site Meta"|t, url: url('seomatic/site') }, ] %} {% if craft.app.version < 2.5 %} {% set tabs = seomaticSections %} {% set selectedTab = 'site' %} {% else %} {% set subnav = seomaticSections %} {% set selectedSubnavItem = 'site' %} {% endif %} {% block main %} {% include "seomatic/_preview_display_modal" with {'previewMetaPath': '', 'elementId': 0, 'locale': siteMeta.locale } %} {% include "seomatic/_preview_tags_modal" with {'previewMetaPath': '', 'elementId': 0, 'locale': siteMeta.locale } %} {% include "seomatic/_preview_robots_modal" %} {% if craft.app.version < 2.5 %}
{% endif %} {{ getCsrfInput() }}
{% if tabs is defined and tabs|length %} {% include "_includes/tabs" %} {% endif %}

{{ "Site Meta" |t }}

{{ forms.textField({ label: "Site SEO Name"|t, instructions: "This field is used wherever the name of the site is referenced, both at the trailing end of the <title> tag, and in other meta tags on the site. It is initially set to your Craft {{ siteName }}." |t |raw, id: "siteSeoName", class: 'nicetext', name: "siteSeoName", value: siteMeta.siteSeoName, required: true, locale: siteMeta.locale, }) }} {{ forms.textField({ label: "Site SEO Title"|t, instructions: "The SEO Title should be between 10 and 70 characters (spaces included). Make sure your title tag is explicit and contains your most important keywords. Be sure that each page has a unique title tag. The siteSeoName length is subtracted from the 70 character limit automatically, since it is appended to the seoTitle." |t |raw, id: 'siteSeoTitle', class: 'nicetext', name: 'siteSeoTitle', value: siteMeta.siteSeoTitle, maxlength: titleLength, showCharsLeft: true, required: false, locale: siteMeta.locale, }) }}
{{ forms.selectField({ label: "Site SEO Name Placement"|t, instructions: "Where the Site SEO Name is placed relative to the Title in the <title> tag" |t |raw, id: 'siteSeoTitlePlacement', options: { "before": "Before"|t, "after": "After"|t, "none": "None"|t, }, name: 'siteSeoTitlePlacement', value: siteMeta.siteSeoTitlePlacement, required: false, locale: siteMeta.locale, }) }}
{{ forms.textField({ label: "Site SEO Name Separator"|t, instructions: "The character that should be used to separate the Site SEO Name and Title in the <title> tag" |t |raw, id: 'siteSeoTitleSeparator', class: 'nicetext smallfield', name: 'siteSeoTitleSeparator', value: siteMeta.siteSeoTitleSeparator, maxlength: 1, required: true, locale: siteMeta.locale, }) }}

{{ "The SEO Description should be between 70 and 160 characters (spaces included). Meta descriptions allow you to influence how your web pages are described and displayed in search results. Ensure that all of your web pages have a unique meta description that is explicit and contains your most important keywords." |t |raw}}

{{ forms.textarea({ id: 'siteSeoDescription', class: 'nicetext', name: 'siteSeoDescription', value: siteMeta.siteSeoDescription, maxlength: 160, showCharsLeft: true, required: false, locale: siteMeta.locale, }) }}

{{ "Google ignores SEO Keywords tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on." |t |raw}}

{{ forms.textarea({ id: 'siteSeoKeywords', class: 'nicetext', name: 'siteSeoKeywords', value: siteMeta.siteSeoKeywords, maxlength: 200, showCharsLeft: true, required: false, locale: siteMeta.locale, }) }}

{{ "This is the image that will be used for display as the global website brand, as well as on Twitter Cards and Facebook OpenGraph that link to the website, if they are not specified. The image must be in JPG, PNG, or GIF format." |t |raw}}

{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elements, id: 'siteSeoImageId', name: 'siteSeoImageId', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: siteSeoImageId, jsClass: 'Craft.AssetSelectInput', addButtonLabel: "Select SEO Image" |t, limit: 1, locale: siteMeta.locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.selectField({ label: "Site SEO Image Transform"|t, instructions: "The image transform to apply to the Site SEO Image."|t, id: "siteSeoImageTransform", options: transformsList, name: "siteSeoImageTransform", value: siteMeta.siteSeoImageTransform, locale: siteMeta.locale, }) }} {{ forms.selectField({ label: "Site Twitter Card Type"|t, instructions: "With Twitter Cards, you can attach rich photos and information to Tweets that drive traffic to your website. Users who Tweet links to your content will have a “Card” added to the Tweet that’s visible to all of their followers."|t, id: "siteTwitterCardType", options: { "summary": "Summary Card"|t, "summary_large_image": "Summary Card with Large Image"|t, }, name: "siteTwitterCardType", value: siteMeta.siteTwitterCardType, locale: siteMeta.locale, }) }}

{{ "This is the image that will be used for display on Twitter Cards in tweets that link to the website. If no image is specified here, the Site SEO Image will be used for Twitter Cards instead. The image must be in JPG, PNG, or GIF format." |t |raw}}

{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elementsTwitter, id: 'siteSeoTwitterImageId', name: 'siteSeoTwitterImageId', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: siteSeoTwitterImageId, jsClass: 'Craft.AssetSelectInput', addButtonLabel: "Select Twitter Card Image" |t, limit: 1, locale: siteMeta.locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.selectField({ label: "Site Twitter Card Image Transform"|t, instructions: "The image transform to apply to the Twitter SEO Image. Twitter recommends: 120 x 120 pixels minimum size, 1:1 aspect ratio, 1mb max size for Summary Card images, and 280x150 pixels minimum size, 1.86:1 aspect ratio, 1mb max size for Summary Card with Large Image images."|t, id: "siteSeoTwitterImageTransform", options: transformsList, name: "siteSeoTwitterImageTransform", value: siteMeta.siteSeoTwitterImageTransform, locale: siteMeta.locale, }) }} {{ forms.selectField({ label: "Site Facebook OpenGraph Type"|t, instructions: "Adding OpenGraph tags to your website influences the performance of your links on social media by allowing you to control what appears when a user posts a link to your content on Facebook."|t, id: "siteOpenGraphType", options: { "website": "Website"|t, "article": "Article"|t, }, name: "siteOpenGraphType", value: siteMeta.siteOpenGraphType, locale: siteMeta.locale, }) }}

{{ "This is the image that will be used for display on Facebook posts that link to the website. If no image is specified here, the Site SEO Image will be used for Facebook posts instead. The image must be in JPG, PNG, or GIF format." |t |raw}}

{% if assetsSourceExists %} {{ forms.elementSelect({ elements: elementsFacebook, id: 'siteSeoFacebookImageId', name: 'siteSeoFacebookImageId', elementType: elementType, criteria: { 'kind': ['image'], 'localeEnabled': null, 'locale': craft.locale, }, sourceElementId: siteSeoFacebookImageId, jsClass: 'Craft.AssetSelectInput', addButtonLabel: "Select Facebook OpenGraph Image" |t, limit: 1, locale: siteMeta.locale, }) }} {% else %}

No assets sources currently exist. Create one now...

{% endif %}
{{ forms.selectField({ label: "Site Facebook OpenGraph Image Transform"|t, instructions: "The image transform to apply to the Facebook SEO Image. Facebook recommends: 1200 x 630 pixels minimum size, 1.9:1 aspect ratio, 8mb max size."|t, id: "siteSeoFacebookImageTransform", options: transformsList, name: "siteSeoFacebookImageTransform", value: siteMeta.siteSeoFacebookImageTransform, locale: siteMeta.locale, }) }} {{ forms.selectField({ label: "Site Robots Meta Tag"|t, instructions: "The robots meta tag lets you utilize a granular, page-specific approach to controlling how an individual page should be indexed and served to users in search results. Setting it to a blank value means 'no change'."|t, id: "siteRobots", options: { "": "", "all": "all - Index this page and follow links (default)" |t, "noindex": "noindex - Do not index this page" |t, "nofollow": "nofollow - Do not follow links on this page" |t, "none": "none - Do not index or follow links on this page" |t, }, name: "siteRobots", value: siteMeta.siteRobots, locale: siteMeta.locale, }) }}

{{ "SiteLinks Search Box" |t }}

{{ "With Google Sitelinks search box, from search results. Search users sometimes use navigational queries, typing in the brand name or URL of a known site or app, only to do a more detailed search once they reach their destination." |t |raw}}

{{ "This property specifies a search URL pattern for sending queries to your site's search engine. It must include a string enclosed in curly braces that is a placeholder for the user's search query (e.g., {search_term_string}). The string inside the curly braces must also appear in the name attribute of the query-input property." |t |raw}}

{{ forms.editableTable({ id: 'siteLinksSearchTargets', name: 'siteLinksSearchTargets', required: false, cols: { searchtargets: { heading: "Search Target" |t, type: "singleline" |t, }, }, rows: siteMeta.siteLinksSearchTargets, locale: siteMeta.locale, }) }}
{{ forms.textField({ label: "Search Query Input"|t, instructions: "The value for the name attribute of query-input must match the string enclosed inside curly braces in the target property of potentialAction, e.g.: search_term_string" |t |raw, id: "siteLinksQueryInput", class: 'nicetext', name: "siteLinksQueryInput", value: siteMeta.siteLinksQueryInput, required: false, locale: siteMeta.locale, }) }}

{{ "robots.txt" |t }}

{{ "

A robots.txt file is a file at the root of your site that indicates those parts of your site you don’t want accessed by search engine crawlers. The file uses the Robots Exclusion Standard, which is a protocol with a small set of commands that can be used to indicate access to your site by section and by specific kinds of web crawlers (such as mobile crawlers vs desktop crawlers).

SEOmatic automatically handles requests for /robots.txt. For this to work, make sure that you do not have an actual robots.txt file in your public/ folder (because that will take precedence). Also note that SEOmatic currently does not generate a sitemap.xml for you.

This is the template used to render it; you have access to all of the Craft & SEOmatic variables.

This is a full Twig template, so you should use standard {{ myVariable }} or {% set woof = dog.bark %} Twig syntax. Environmental variables must be accessed via {{ craft.config.environmentVariables.myVariable }}

" |t |raw }}
{{ forms.textarea({ id: 'siteRobotsTxt', class: 'nicetext codeStyle', name: 'siteRobotsTxt', value: siteMeta.siteRobotsTxt, required: false, rows: 15, locale: siteMeta.locale, }) }}

 

{{ "

You can use any Craft environmentVariables in these fields in addition to static text, e.g.:
This is my {baseUrl}

" |t |raw }}

{{ "Preview SEO Meta Display" |t }}
{{ "Preview SEO Meta Tags" |t }}
{% if craft.isLocalized %}
    {% for locale in craft.i18n.getSiteLocales() %} {% if locale == siteMeta.locale %}
  • {{ locale.name }}
  • {% else %}
  • {{ locale.name }}
  • {% endif %} {% endfor %}
  • {{ "If any field is left blank for a setting in a particular locale, it will fall back on the primary locale." |t |raw }}

{% endif %}
{{ "

These SEO Site Meta settings are used to globally define the Meta for the website. When no SEO Template Meta is found for a webpage, these settings are used by default.

They are used in combination with the SEO Template Meta & SEO Entry Meta settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

If a no Template Meta exists for a template, the SEO Site Meta is used.

If any fields are left blank in a Template Meta, those fields are pulled from the SEO Site Meta.

You can also dynamically change the seomaticMeta.* variables in your Twig templates, and they will appear in the rendered SEO Meta.

" |t |raw }}
{{ "Preview robots.txt" |t }}
{% if craft.app.version < 2.5 %}
{% endif %}
{% if craft.app.version < 2.5 %}
{% endif %} {% endblock %} ================================================ FILE: templates/social/_edit.twig ================================================ {% extends "_layouts/cp" %} {% import '_includes/forms' as forms %} {% includeCssResource "css/entry.css" %} {% includeCssResource "seomatic/css/style.css" %} {% includeCssResource "seomatic/css/css-reset.css" %} {% includeCssResource "seomatic/css/prism.min.css" %} {% includeJsResource "seomatic/js/seomatic.js" %} {% includeJsResource "seomatic/js/jquery.bpopup.min.js" %} {% includeJsResource "seomatic/js/prism.min.js" %} {% set title = craft.seomatic.getPluginName() %} {% set fullPageForm = true %} {% set hasCustomLayout = true %} {% set docsUrl = "https://github.com/nystudio107/seomatic/wiki" %} {% set localeUrlSuffix = "" %} {% if craft.isLocalized %} {% set localeUrlSuffix = "/" ~ social.locale %} {% endif %} {% set seomaticSections = { seometrics: { label: "SEOmetrics"|t, url: url('seomatic/seometrics') }, meta: { label: "Template Meta"|t, url: url('seomatic/meta') }, site: { label: "Site Meta"|t, url: url('seomatic/site' ~ localeUrlSuffix ) }, identity: { label: "Site Identity"|t, url: url('seomatic/identity' ~ localeUrlSuffix ) }, social: { label: "Social Media"|t, url: url('seomatic/social' ~ localeUrlSuffix ) }, creator: { label: "Site Creator"|t, url: url('seomatic/creator' ~ localeUrlSuffix ) }, settings: { label: "Settings"|t, url: url('seomatic/settings') }, } %} {% set crumbs = [ { label: craft.seomatic.getPluginName(), url: url('seomatic') }, { label: "Social Media"|t, url: url('seomatic/social') }, ] %} {% if craft.app.version < 2.5 %} {% set tabs = seomaticSections %} {% set selectedTab = 'social' %} {% else %} {% set subnav = seomaticSections %} {% set selectedSubnavItem = 'social' %} {% endif %} {% block main %} {% include "seomatic/_preview_display_modal" with {'previewMetaPath': '', 'elementId': 0, 'locale': social.locale } %} {% include "seomatic/_preview_tags_modal" with {'previewMetaPath': '', 'elementId': 0, 'locale': social.locale } %} {% if craft.app.version < 2.5 %}
{% endif %} {{ getCsrfInput() }}
{% if tabs is defined and tabs|length %} {% include "_includes/tabs" %} {% endif %}

{{ "Social Media" |t }}

{{ forms.textField({ label: "Twitter Handle"|t, instructions: ("Your Twitter Handle, without the preceding @ This must be set for Twitter Card tags to be generated.") |t |raw, id: "twitterHandle", class: 'nicetext', name: "twitterHandle", value: social.twitterHandle, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "Facebook Handle"|t, instructions: ("Your Facebook company/fan page handle (the part after https://www.facebook.com/)") |t |raw, id: "facebookHandle", class: 'nicetext', name: "facebookHandle", value: social.facebookHandle, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "Facebook Profile ID"|t, instructions: ("Your Facebook Profile/Page ID. Click on the 'About' tab on your Facebook company/fan page, click on 'Page Info', then scroll to the bottom to find your 'Facebook Page ID'") |t |raw, id: "facebookProfileId", class: 'nicetext', name: "facebookProfileId", value: social.facebookProfileId, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "Facebook App ID"|t, instructions: ("Your Facebook App ID. Providing a Facebook Application ID for use with the Social Media Sharing feature is recommended, but optional. Learn More") |t |raw, id: "facebookAppId", class: 'nicetext', name: "facebookAppId", value: social.facebookAppId, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "Wikipedia URL"|t, instructions: ("The full URL to the Wikipedia.com entry that is about this entity. Learn More") |t |raw, id: "wikipediaUrl", class: 'nicetext', name: "wikipediaUrl", value: social.wikipediaUrl, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "LinkedIn Handle"|t, instructions: ("Your LinkedIn page handle (the part after https://www.linkedin.com/in/ or https://www.linkedin.com/company/)") |t |raw, id: "linkedInHandle", class: 'nicetext', name: "linkedInHandle", value: social.linkedInHandle, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "Google+ Handle"|t, instructions: ("Your Google+ page handle, without the preceding +. If you have a numeric Google+ account still, just enter that.") |t |raw, id: "googlePlusHandle", class: 'nicetext', name: "googlePlusHandle", value: social.googlePlusHandle, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "YouTube User Handle"|t, instructions: ("Your YouTube user handle (the part after https://www.youtube.com/user/)") |t |raw, id: "youtubeHandle", class: 'nicetext', name: "youtubeHandle", value: social.youtubeHandle, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "YouTube Channel Handle"|t, instructions: ("Your YouTube channel handle (the part after https://www.youtube.com/c/)") |t |raw, id: "youtubeChannelHandle", class: 'nicetext', name: "youtubeChannelHandle", value: social.youtubeChannelHandle, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "Instagram Handle"|t, instructions: ("Your Instagram handle") |t |raw, id: "instagramHandle", class: 'nicetext', name: "instagramHandle", value: social.instagramHandle, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "Pinterest Handle"|t, instructions: ("Your Pinterest page handle (the part after https://www.pinterest.com/)") |t |raw, id: "pinterestHandle", class: 'nicetext', name: "pinterestHandle", value: social.pinterestHandle, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "Github Handle"|t, instructions: ("Your Github page handle (the part after https://github.com/)") |t |raw, id: "githubHandle", class: 'nicetext', name: "githubHandle", value: social.githubHandle, required: false, locale: social.locale, }) }} {{ forms.textField({ label: "Vimeo Handle"|t, instructions: ("Your Vimeo page handle (the part after https://vimeo.com/)") |t |raw, id: "vimeoHandle", class: 'nicetext', name: "vimeoHandle", value: social.vimeoHandle, required: false, locale: social.locale, }) }}

 

{{ "

You can use any Craft environmentVariables in these fields in addition to static text, e.g.:
This is my {baseUrl}

" |t |raw }}

{{ "Preview SEO Meta Display" |t }}
{{ "Preview SEO Meta Tags" |t }}
{% if craft.isLocalized %}
    {% for locale in craft.i18n.getSiteLocales() %} {% if locale == social.locale %}
  • {{ locale.name }}
  • {% else %}
  • {{ locale.name }}
  • {% endif %} {% endfor %}
  • {{ "If any field is left blank for a setting in a particular locale, it will fall back on the primary locale." |t |raw }}

{% endif %}
{{ "

These Social Media settings are used to globally define the social media accounts associated with the website.

They are used in combination with the SEO Meta settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

None of these fields are mandatory; if you don't have a given social media account, just leave it blank.

" |t |raw }}
{% if craft.app.version < 2.5 %}
{% endif %}
{% if craft.app.version < 2.5 %}
{% endif %} {% endblock %} ================================================ FILE: templates/welcome.twig ================================================ {% extends '_layouts/cp' %} {% set title = 'Welcome to SEOmatic!' %} {% includeCssResource "seomatic/css/style.css" %} {% set linkGetStarted = url('seomatic/site') %} {% set docsUrl = "https://github.com/nystudio107/seomatic/wiki" %} {% set crumbs = [ { label: craft.seomatic.getPluginName(), url: url('seomatic') }, { label: "Welcome"|t, url: url('seomatic/welcome') }, ] %} {% set content %}

Thanks for using SEOmatic!

SEOmatic is a turnkey SEO implementation for Craft CMS that is comprehensive, powerful, and flexible. The SEOmetrics feature scans your content for focus keywords, and offers analysis on how to improve your SEO.

It implements JSON-LD microdata, Dublin Core core metadata, Twitter Card tags, Facebook Open Graph tags, Humans.txt authorship accreditation, and as well as HTML meta tags.

The general philosophy is that SEO Site Meta can be overridden by SEO Template Meta, which can be overridden by SEO Entry Meta, which can be overridden by dynamic SEO Twig tags. See the documentation for details by clicking on the ? link below.

To better understand how all of this metadata benefits your website, please read: Promote Your Content with Structured Data Markup

 

Brought to you by nystudio107

{% endset %} ================================================ FILE: translations/fr.php ================================================ 'SEOmatic', 'Untitled Meta' => 'Meta sans nom', 'SEO Template Meta' => 'Meta du gabarit SEO', 'No meta exists with the ID “{id}”' => 'Aucun meta n\'existe avec l\'id “{id}”', 'SEOmatic Meta saved.' => 'Meta SEOmatic Meta sauvegardé.', 'Couldn’t save SEOmatic Meta.' => 'Ce meta SEOmatic n\'a pas pu être sauvegardé.', 'SEOmatic Meta deleted.' => 'Meta SEOmatic supprimé.', 'Couldn’t delete SEOmatic Meta.' => 'Ce meta SEOmatic n\'a pas pu être supprimé.', 'No SEOmatic Site Meta exists' => 'Aucun meta SEOmatic du site n\'existe.', 'SEOmatic Site Meta saved.' => 'Meta SEOmatic du site sauvegardé.', 'Couldn’t save SEOmatic Site Meta.' => 'Ce meta SEOmatic du site n\'a pas pu être sauvegardé.', 'No SEOmatic Settings record exists' => 'Aucun paramètre SEOmatic n\'existe pour cet enregistrement', 'SEOmatic Site Identity saved.' => 'Identité du site SEOmatic sauvegardée.', 'Couldn’t save SEOmatic Site Identity.' => 'L\'identité du site SEOmatic n\'a pu être sauvegardée.', 'SEOmatic Social Media saved.' => 'Média social SEOmatic sauvegardé.', 'SEOmatic Site Creator saved.' => 'Créateur de site SEOmatic sauvegardé.', 'Couldn’t save SEOmatic Site Creator.' => 'Le créateur de site SEOmatic n\'a pu être sauvegardé.', 'Meta' => 'Meta', 'Template Metas' => 'Metas du gabarit', 'Are you sure you want to delete the selected Template Metas?' => 'Êtes-vous certain de vouloir supprimer les metas du gabarit sélectionnés?', 'Forms deleted.' => 'Formulaire supprimé.', 'Title' => 'Titre', 'Template Path' => 'Répertoire du gabarit', 'SEOmatic Meta' => 'Meta SEOmatic', 'Copyright' => 'Copyright', 'Rendered For' => 'Rendu pour', 'Entry Meta. This is what is generated for the this Entry with data from the SEOmatic Meta field.' => 'Entrée Meta. C\'est ce qui est généré pour cette entrée avec les données du champ de Meta SEOmatic.', 'SEO Template Meta. This is what is generated when this template is displayed.' => 'Gabarit de SEO Meta. C\'est ce qui est généré quand ce gabarit est affiché.', 'SEO Site Meta. This is what is generated for the global Site Meta, with no Template Meta overrides.' => 'Site SEO Meta. C\'est ce qui est généré pour le meta général du site, sans remplacer le gabarit meta.', 'Google Search Result Display' => 'Affichage du résultat de recherche Google', 'This is a preview of how the Google search result will appear for this page, due to the SEO Meta tags generated by SEOmatic.' => 'Ceci est un aperçu de comment le résultat de recherche Google va apparaitre pour cette page, en raison des mots clés meta générés par SEOmatic.', 'Twitter Card Display' => 'Affichage de la carte Twitter', 'If someone Tweets a link to this page, this is how the Twitter Card attached to their tweet (via the \'View summary\' link) will appear, due to the Twitter Card tags generated by SEOmatic.' => 'Si quelqu\'un Tweet un lien vers cette page, c\'est ainsi que la Carte Twitter en pièce jointe à leur Tweet (par l\'intermédiaire du lien \'View summary\') va s\'afficher, en raison des mots clés de la Carte Twitter générés par SEOmatic.', 'Facebook OpenGraph Display' => 'Affichage de Facebook OpenGraph', 'If someone posts a link to this page on Facebook, this is how the summary below their post will appear, due to the Facebook OpenGraph tags generated by SEOmatic.' => 'Si quelqu\'un publie un lien vers cette page sur Facebook, c\'est ainsi que le résumé en-dessous de leur publication va s\'afficher, en raison des mots-clés Facebook OpenGraph générés par SEOmatic.', 'Preview Humans.txt' => 'Aperçu de Humans.txt', 'Humans.txt is an initiative for knowing the people behind a website. It\'s a TXT file that contains information about the different people who have contributed to building the website. By adding a txt file, you can prove your authorship (not your property) in an external, fast, easy and accessible way.' => 'Humans.txt est une initiative pour connaitre les personnes derrière un site web. Il s\'agit d\'un fichier TXT qui contient les informations à propos des différentes personnes qui ont contribué à la conception du site. En ajoutant ce fichier txt, vous pouvez prouver votre autorité (mais pas votre propriété) d\'une façon rapide, facile et accessible.', 'SEOmatic automatically generates Humans.txt authorship accreditation with the following tag:' => 'SEOmatic génère automatiquement Humans.txt une accréditation de paternité avec les mots clés suivants:', 'The rendered humans.txt file:' => 'Le fichier humans.txt rendu:', 'Preview robots.txt' => 'Aperçu de robots.txt', 'A robots.txt file is a file at the root of your site that indicates those parts of your site you don’t want accessed by search engine crawlers. The file uses the Robots Exclusion Standard, which is a protocol with a small set of commands that can be used to indicate access to your site by section and by specific kinds of web crawlers (such as mobile crawlers vs desktop crawlers).' => 'Un fichier robots.txt est un fichier à la racine de votre site qui indique les sections de votre site que vous ne voulez pas rendre accessibles aux moteurs de recherche. Le fichier utilise le "Robots Exclusion Standard", un protocole avec un petit ensemble de commandes qui peut être utilisé pour indiquer l\'accès à votre site par section et par de spéficiques types de robots d\'indexation (tel que les robots pour mobile et ordinateur de bureau).', 'SEOmatic automatically handles requests for /robots.txt. For this to work, make sure that you do not have an actual robots.txt file in your public/ folder (because that will take precedence).' => 'SEOmatic prend automatiquement en charge les requêtes /robots.txt. Pour que cela fonctionne, assurez-vous que vous n\'avez pas un fichier robots.txt dans votre dossier public/ (car ce dernier va avoir priorité).', 'The rendered robots.txt file:' => 'Le fichier robots.txt rendu:', 'seomaticRender' => 'seomaticRender', 'Entry Meta. This is what is generated for this Entry with data from the SEOmatic Meta field.' => 'Entry Meta. Voici ce qui est généré pour cette entrée avec les données du champ Meta de SEOmatic.', 'SEO Template Meta. This is what is generated when this template is displayed.' => 'Meta du gabarit SEO. Voici ce qui est généré quand ce gabarit est affiché.', 'Meta Template Variables' => 'Variables du gabarit Meta', 'These are the Twig variables that SEOmatic pre-populates, and makes available to you in your templates. They are used when rendering the SEO Meta, so you can manipulate them however you want before rendering your SEO Meta. For example, you might change the seomaticMeta.seoDescription to be the summary field of an entry.' => 'These are the Twig variables that SEOmatic pre-populates, and makes available to you in your templates. They are used when rendering the SEO Meta, so you can manipulate them however you want before rendering your SEO Meta. For example, you might change the seomaticMeta.seoDescription to be the summary field of an entry.', 'You can treat all of these like regular Twig variables; for instance, {{ seomaticHelper.twitterUrl }} will output the URL to the website\'s Twitter page. You can change these variables using the Twig array set syntax, or using the Twig function merge. Any changes you make will be reflected in the SEO Meta rendered with {% hook \'seomaticRender\' %} on your page. The email variables are ordinal-encoded to obfuscate them. See the documentation for details by clicking on the ? link below.' => 'You can treat all of these like regular Twig variables; for instance, {{ seomaticHelper.twitterUrl }} will output the URL to the website\'s Twitter page. You can change these variables using the Twig array set syntax, or using the Twig function merge. Any changes you make will be reflected in the SEO Meta rendered with {% hook \'seomaticRender\' %} on your page. The email variables are ordinal-encoded to obfuscate them. See the documentation for details by clicking on the ? link below.', 'Rendered SEO Meta' => 'Meta SEO rendu', 'The {% hook \'seomaticRender\' %} tag generates these SEO Meta for you, based on the Meta Template Variables (see below). By default, it uses an internal template, but you can pass your own template to be used instead, like this: {% set seomaticTemplatePath = \'path/template\' %} {% hook \'seomaticRender\' %}' => 'The {% hook \'seomaticRender\' %} tag generates these SEO Meta for you, based on the Meta Template Variables (see below). By default, it uses an internal template, but you can pass your own template to be used instead, like this: {% set seomaticTemplatePath = \'path/template\' %} {% hook \'seomaticRender\' %}', 'SEOmatic cascades Meta settings; if you have a Meta associated with the current template, it uses that. Otherwise it falls back on the SEO Site Meta settings. If a field is empty for a Template Meta, it falls back on the SEO Site Meta setting for that field.' => 'SEOmatic cascades Meta settings; if you have a Meta associated with the current template, it uses that. Otherwise it falls back on the SEO Site Meta settings. If a field is empty for a Template Meta, it falls back on the SEO Site Meta setting for that field.', 'Rendered Identity Microdata' => 'Rendered Identity Microdata', 'The {% hook \'seomaticRender\' %} tag also generates JSON-LD identity microdata that tells search engines about the company that owns the website. JSON-LD is an alternative to microdata you may already be familiar with, such as: <div itemscope itemtype=\'http://schema.org/Organization\'>. JSON-LD has the advantage of not being intertwined with HTML markup, so it\'s easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess.' => 'The {% hook \'seomaticRender\' %} tag also generates JSON-LD identity microdata that tells search engines about the company that owns the website. JSON-LD is an alternative to microdata you may already be familiar with, such as: <div itemscope itemtype=\'http://schema.org/Organization\'>. JSON-LD has the advantage of not being intertwined with HTML markup, so it\'s easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess.', 'Rendered WebSite Microdata' => 'Rendered WebSite Microdata', 'The {% hook \'seomaticRender\' %} tag also generates JSON-LD WebSite microdata that tells search engines about the website. JSON-LD is an alternative to microdata you may already be familiar with, such as: <div itemscope itemtype=\'http://schema.org/Organization\'>. JSON-LD has the advantage of not being intertwined with HTML markup, so it\'s easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess.' => 'The {% hook \'seomaticRender\' %} tag also generates JSON-LD WebSite microdata that tells search engines about the website. JSON-LD is an alternative to microdata you may already be familiar with, such as: <div itemscope itemtype=\'http://schema.org/Organization\'>. JSON-LD has the advantage of not being intertwined with HTML markup, so it\'s easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess.', 'Rendered Place Microdata' => 'Rendered Place Microdata', 'The {% hook \'seomaticRender\' %} tag also generates JSON-LD Place microdata for Organizations that tells search engines where the organization is located. JSON-LD is an alternative to microdata you may already be familiar with, such as: <div itemscope itemtype=\'http://schema.org/Organization\'>. JSON-LD has the advantage of not being intertwined with HTML markup, so it\'s easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess.' => 'The {% hook \'seomaticRender\' %} tag also generates JSON-LD Place microdata for Organizations that tells search engines where the organization is located. JSON-LD is an alternative to microdata you may already be familiar with, such as: <div itemscope itemtype=\'http://schema.org/Organization\'>. JSON-LD has the advantage of not being intertwined with HTML markup, so it\'s easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess.', 'Rendered Product Microdata' => 'Rendered Product Microdata', 'The {% hook \'seomaticRender\' %} tag also generates JSON-LD Product microdata if an SEOmatic FieldType is attached to a Craft Commerce Product. JSON-LD is an alternative to microdata you may already be familiar with, such as: <div itemscope itemtype=\'http://schema.org/Organization\'>. JSON-LD has the advantage of not being intertwined with HTML markup, so it\'s easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess.' => 'The {% hook \'seomaticRender\' %} tag also generates JSON-LD Product microdata if an SEOmatic FieldType is attached to a Craft Commerce Product. JSON-LD is an alternative to microdata you may already be familiar with, such as: <div itemscope itemtype=\'http://schema.org/Organization\'>. JSON-LD has the advantage of not being intertwined with HTML markup, so it\'s easier to use. It is parsed and consumed by Google, allowing you to tell Google what your site is about, rather than having it try to guess.', 'before' => 'avant', 'alternate' => 'alterner', 'after' => 'après', 'Focus Keyword' => 'Mot clé principal', 'SEO Analysis' => 'Analyse des SEO', 'Textual Analysis' => 'Analyse textuelle', 'Site Identity' => 'Identité du site', 'Social Media' => 'Médias sociaux', 'Look up Latitude/Longitude' => 'Chercher Latitude/Longitude', 'Save' => 'Sauvegarder', 'Template Meta' => 'Meta du gabarit', 'Site Meta' => 'Meta du site', 'Site Creator' => 'Créateur du site', 'Settings' => 'Paramètres', 'Site Creator Entity Type' => 'Type d\'entité du créateur du site', 'The type of entity that created this website.' => 'Le type d\'entité qui a créé ce site web', 'Corporation' => 'Corporation', 'Local Business' => 'Entreprise locale', 'Organization' => 'Organisation', 'Person' => 'Personne', 'General Info' => 'Informations générales', 'Entity Name' => 'Nom de l\'entité', 'The name of the entity that created the website' => 'Le nom de l\'entité qui a créé le site web', 'Alternate Entity Name' => 'Nom alternatif de l\'entité', 'An alternate or nickname for the entity that created the website' => 'Un autre nom ou un surnom pour l\'entité qui a créé le site web', 'Entity Description' => 'Description de l\'entité', 'A description of the entity that created the website' => 'Une description de l\'entité qui a créé le site web', 'Entity URL' => 'URL de l\'entité', 'A URL for the entity that created the website' => 'Une URL pour l\'entité qui a créé le site web', 'Entity Brand' => 'Marque de l\'entité', 'An image or logo that represents the entity that created the website' => 'Une image ou un logo qui représente l\'entité qui a créé le site web', 'Entity Telephone' => 'Téléphone de l\'entité', 'The primary contact telephone number for the entity that created the website' => 'Le numéro de téléphone principal pour l\'entité qui a créé le site web', 'Entity Email' => 'Adresse courriel de l\'entité', 'The primary contact email address for the entity that created the website' => 'L\'adresse courriel de contact principale pour l\'entité qui a créé le site web', 'Location Info' => 'Informations de localisation', 'Entity Latitude' => 'Latitude de l\'entité', 'The latitude of the location of the entity that created the website, e.g.: -120.5436367' => 'La latitude de la localisation de l\'entité qui a créé le site web, ex.: -120.5436367', 'Entity Longitude' => 'Longitude de l\'entité', 'The longitude of the location of the entity that created the website, e.g.: 80.6033588' => 'La longitude de la localisation de l\'entité qui a créé le site web, ex.: 80.6033588', 'No location found. Perhaps the address is wrong/incomplete?' => 'Aucun emplacement trouvé. L\'adresse est peut-être incorrecte ou incomplète?', 'Entity Street Address' => 'Adresse de rue de l\'entité', 'The street address of the entity that created the website, e.g.: 575 Dunfrey Road' => 'L\'adresse de rue de l\'entité qui a créé le site web, ex.: 138, avenue Pleau', 'Entity Locality' => 'Ville de l\'entité', 'The locality of the entity that created the website, e.g.: Lansing' => 'La localité de l\'entité qui a créé le site web, ex.: Donnacona', 'Entity Region' => 'Région de l\'entité', 'The region of the entity that created the website, e.g.: Michigan or MI' => 'La région de l\'entité qui a créé le site web, ex.: Québec ou QC', 'Entity Postal Code' => 'Code postal de l\'entité', 'The postal code of the entity that created the website, e.g.: 11360' => 'Le code postal de l\'entité qui a créé le site web, ex.: G3M 1A1', 'Entity Country' => 'Pays de l\'entité', 'The country in which the entity that created the website is located, e.g.: US' => 'Le pays dans lequel l\'entité qui a créé le site web est située, ex.: CA', 'Organization Info' => 'Informations de l\'organisation', 'Organization DUNS Number' => 'Numéro DUNS de l\'organisation', 'The DUNS (Dunn & Bradstreet) number of the organization/company that created the website' => 'Le numéro DUNS de l\'organisation/compagnie qui a créé le site web', 'Organization Founder' => 'Fondateur de l\'organisation', 'The name of the founder of the organization/company' => 'Le nom du fondateur de l\'organisation/compagnie', 'Organization Founding Date' => 'Date de fondation de l\'organisation', 'The date the organization/company was founded' => 'La date à laquelle a été fondée l\'organisation/compagnie', 'Organization Founding Location' => 'Endroit de fondation de l\'organisation', 'The location where the organization/company was founded' => 'L\'endroit où a été fondée l\'organisation/compagnie', 'Organization Contact Points' => 'Points de contact de l\'organisation', 'Contact Points' => 'Points de contact', 'Use organization contact points to add your organizations\'s contact information to the Google Knowledge panel in some searches. The Telephone Number must be an internationalized version of the phone number, starting with the \'+\' symbol and country code (+1 in the US and Canada). e.g.: +1-800-555-1212 or +44-2078225951' => 'Utilisez organization contact points pour ajouter les informations de contact de votre organisation au Google Knowledge Panel dans certaines recherches. Le numéro de téléphone doit être une version internationale du numéro, débutant avec le symbôle \'+\' et le code régional (+1 aux États-Unis et au Canada). ex: +1-800-555-1212 ou +44-2078225951', 'Telephone Number' => 'Numéro de téléphone', 'singleline' => 'singleline', 'Contact Type' => 'type de contact', 'select' => 'Sélectionner', 'Corporation Info' => 'Informations de la corporation', 'Corporation Ticker Symbol' => 'Symbôle boursier de la corporation', 'The exchange ticker symbol of the corporation' => 'Le symbôle boursier de la corporation', 'Person Info' => 'Informations de la personne', 'Person Gender' => 'Sexe de la personne', 'The gender of the person' => 'Le sexe de la personne', 'Male' => 'Mâle', 'Female' => 'Femelle', 'Other' => 'Autre', 'Person Birth Place' => 'Lieu de naissance de la personne', 'The place where the person was born' => 'L\'endroit où la perosnne est née', 'Humans.txt' => 'Humans.txt', 'Humans.txt Template' => 'Gabarit Humans.txt', '

Humans.txt is an initiative for knowing the people behind a website. It\'s a TXT file that contains information about the different people who have contributed to building the website. By adding a txt file, you can prove your authorship (not your property) in an external, fast, easy and accessible way.

This is the template used to render it; you have access to all of the Craft & SEOmatic variables.

This is a full Twig template, so you should use standard {{ myVariable }} or {% set woof = dog.bark %} Twig syntax. Environmental variables must be accessed via {{ craft.config.environmentVariables.myVariable }}

' => 'Humans.txt est une initiative pour connaitre les personnes derrière un site web. Il s\'agit d\'un fichier TXT qui contient les informations à propos des différentes personnes qui ont contribué à la conception du site. En ajoutant ce fichier txt, vous pouvez prouver votre autorité (mais pas votre propriété) d\'une façon rapide, facile et accessible.

Ceci est le gabarit utilisé pour en faire le rendu; vous avez accès à l\'ensemble des & variables SEOmatic.

Il s\'agit d\'un gabarit entièrement Twig, alors vous devriez utiliser du code standard {{ myVariable }} ou {% set woof = dog.bark %} la syntaxe Twig. Les variables environnementales doivent être accédées par l\'intermédiaire de {{ craft.config.environmentVariables.myVariable }}

', '

You can use any Craft environmentVariables in these fields in addition to static text, e.g.:
This is my {baseUrl}

' => '

Vous pouvez utiliser n\'importe quelle environmentVariables de Craft dans ces champs en plus du texte statique, ex:
Ceci est ma {baseUrl}

', 'Preview SEO Meta Display' => 'Aperçu de l\'affichage des Meta SEO', 'Preview SEO Meta Tags' => 'Aperçu des mots clé des Meta SEO', 'If any field is left blank for a setting in a particular locale, it will fall back on the primary locale.' => 'If any field is left blank for a setting in a particular locale, it will fall back on the primary locale.', '

These Site Creator settings are used to globally define & attribute the creator of the website. The creator is the company/individual that developed the website.

They are used in combination with the SEO Template Meta & SEO Entry Meta settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

The Site Creator information is referenced in the WebSite JSON-LD schema that is used to identity the website to search engines.

Leave any fields blank that aren\'t applicable or which you do not want as part of the SEO schema.

' => '

Ces paramètres du créateur du site sont utilisés pour définir et attribuer dans l\'ensemble le créateur du site web. Le créateur est l\'entreprise/particulier qui a développé le site web.

Ils sont utilisés de concert avec les paramètres Meta du gabarit SEO et le Meta d\'entrée SEO pour générer des microdonnées JSON-LD, des métadonnées du noyau Dublin Core, Twitter Cards, Facebook OpenGraph, et ainsi que les mots clés Meta HTML.

L\'information du créateur du site sont est référencé dans le schéma JSON-LD du site web qui est utilisé pour identifier le site web aux moteurs de recherche.

Laissez les champs qui ne sont pas applicables ou que vous ne voulez pas dans le schéma SEO vides.

', 'SEO Title' => 'Titre SEO', 'The SEO Title should be between 10 and 70 characters (spaces included). Make sure your title tag is explicit and contains your most important keywords. Be sure that each page has a unique title tag. The siteSeoName length is subtracted from the 70 character limit automatically, since it is appended to the seoTitle.' => 'Le titre SEO devrait être entre 10 et 70 caractères (espaces compris). Assurez-vous que votre balise title est explicite et contient vos mots clés les plus importants. Vérifiez que chaque page a une balise title unique. La longueur du siteSeoName est soustraite de la limite de 70 caractères automatiquement, puisque c\'est annexé au seoTitle.', 'Source' => 'Source', 'Custom Text' => 'Custom Text', 'From Field' => 'From Field', 'You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below.' => 'You can include tags that output entry properties, such as {title} or {myCustomField} in the text field below.', 'SEO Description' => 'Description SEO', 'The SEO Description should be between 70 and 160 characters (spaces included). Meta descriptions allow you to influence how your web pages are described and displayed in search results. Ensure that all of your web pages have a unique meta description that is explicit and contains your most important keywords.' => 'La description SEO devrait être entre 70 et 160 caractères (espaces compris). Les descriptions Meta vous permettent d\'influencer comment vos pages web sont décrites et affichées dans les résultats de recherche. Assurez-vous que l\'ensemble de vos pages web ont une description meta unique qui est explicite et contient vos mots clés les plus importants.', 'SEO Keywords' => 'SEO Keywords', 'Google ignores the SEO Keywords tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on.' => 'Google ignores the SEO Keywords tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on.', 'Keywords From Field' => 'Keywords From Field', 'SEO Image' => 'SEO Image', 'This is the image that will be used for display as the webpage brand for this template, as well as on Twitter Cards and Facebook OpenGraph that link to this page. It should be an image that displays well when cropped to a square format (for Twitter)' => 'This is the image that will be used for display as the webpage brand for this template, as well as on Twitter Cards and Facebook OpenGraph that link to this page. It should be an image that displays well when cropped to a square format (for Twitter)', 'Custom Image' => 'Custom Image', 'Select SEO Image' => 'Select SEO Image', 'Twitter Card Type' => 'Twitter Card Type', 'With Twitter Cards, you can attach rich photos and information to Tweets that drive traffic to your website. Users who Tweet links to your content will have a “Card” added to the Tweet that’s visible to all of their followers. Setting it to a blank value means \'no change\'.' => 'With Twitter Cards, you can attach rich photos and information to Tweets that drive traffic to your website. Users who Tweet links to your content will have a “Card” added to the Tweet that’s visible to all of their followers. Setting it to a blank value means \'no change\'.', 'Summary Card' => 'Carte résumé', 'Summary Card with Large Image' => 'Carte résumé avec image large', 'Facebook Open Graph Type' => 'Facebook Open Graph Type', 'Adding Open Graph tags to your website influences the performance of your links on social media by allowing you to control what appears when a user posts a link to your content on Facebook. Setting it to a blank value means \'no change\'.' => 'Adding Open Graph tags to your website influences the performance of your links on social media by allowing you to control what appears when a user posts a link to your content on Facebook. Setting it to a blank value means \'no change\'.', 'Website' => 'Site web', 'Article' => 'Article', 'Robots Meta Tag' => 'Robots Meta Tag', 'The robots meta tag lets you utilize a granular, page-specific approach to controlling how an individual page should be indexed and served to users in search results. Setting it to a blank value means \'no change\'.' => 'The robots meta tag lets you utilize a granular, page-specific approach to controlling how an individual page should be indexed and served to users in search results. Setting it to a blank value means \'no change\'.', 'all - Index this page and follow links (default)' => 'all - Indexe cette page et suit les liens (par défaut)', 'noindex - Do not index this page' => 'noindex - N\'indexe pas cette page', 'nofollow - Do not follow links on this page' => 'nofollow - Ne pas suivre les liens sur cette page', 'none - Do not index or follow links on this page' => 'none - Ne pas indexer ou suivre les liens sur cette page', 'Asset Sources' => 'Asset Sources', 'Which sources do you want to select assets from?' => 'Which sources do you want to select assets from?', 'Default SEO Title' => 'Default SEO Title', 'Set what the SEO Title should default to for each entry.' => 'Set what the SEO Title should default to for each entry.', 'SEO Title Source Changeable' => 'SEO Title Source Changeable', 'Whether to allow the user to change the SEO Title source while editing the entry' => 'Whether to allow the user to change the SEO Title source while editing the entry', 'Default SEO Description' => 'Default SEO Description', 'Set what the SEO Description should default to for each entry.' => 'Set what the SEO Description should default to for each entry.', 'SEO Description Source Changeable' => 'SEO Description Source Changeable', 'Whether to allow the user to change the SEO Description source while editing the entry' => 'Whether to allow the user to change the SEO Description source while editing the entry', 'Default SEO Keywords' => 'Default SEO Keywords', 'Set what the SEO Keywords should default to for each entry.' => 'Set what the SEO Keywords should default to for each entry.', 'SEO Keywords Source Changeable' => 'SEO Keywords Source Changeable', 'Whether to allow the user to change the SEO Keywords source while editing the entry' => 'Whether to allow the user to change the SEO Keywords source while editing the entry', 'Default SEO Image' => 'Default SEO Image', 'Set what the SEO Image should default to for each entry.' => 'Set what the SEO Image should default to for each entry.', 'SEO Image Source Changeable' => 'SEO Image Source Changeable', 'Whether to allow the user to change the SEO Image source while editing the entry' => 'Whether to allow the user to change the SEO Image source while editing the entry', 'Default Twitter Card Type' => 'Default Twitter Card Type', 'Set what the Twitter Card Type should default to for each entry. Setting it to a blank value means \'no change\'.' => 'Set what the Twitter Card Type should default to for each entry. Setting it to a blank value means \'no change\'.', 'Twitter Card Type Changeable' => 'Twitter Card Type Changeable', 'Whether to allow the user to change the Twitter Card Type while editing the entry' => 'Whether to allow the user to change the Twitter Card Type while editing the entry', 'Default Facebook Open Graph Type' => 'Default Facebook Open Graph Type', 'Set what the Facebook Open Graph Type should default to for each entry. Setting it to a blank value means \'no change\'.' => 'Set what the Facebook Open Graph Type should default to for each entry. Setting it to a blank value means \'no change\'.', 'Facebook Open Graph Type Changeable' => 'Facebook Open Graph Type Changeable', 'Whether to allow the user to change the Facebook Open Graph Type while editing the entry' => 'Whether to allow the user to change the Facebook Open Graph Type while editing the entry', 'Default Robots Meta Tag' => 'Default Robots Meta Tag', 'Set what the Robots Meta Tag should default to for each entry. Setting it to a blank value means \'no change\'.' => 'Set what the Robots Meta Tag should default to for each entry. Setting it to a blank value means \'no change\'.', 'Robots Meta Tag Changeable' => 'Robots Meta Tag Changeable', 'Whether to allow the user to change the Robots Meta Tag while editing the entry' => 'Whether to allow the user to change the Robots Meta Tag while editing the entry', 'Site Ownership' => 'Site Ownership', 'Google Site Verification' => 'Vérification Google Site', 'For the <meta name=\'google-site-verification\'> tag. Only enter the code in the content=\'\', not the entire tag. Here\'s how to get it.' => 'Pour le mot clé <meta name=\'google-site-verification\'>. Entrez seulement le code dans le content=\'\', pas le mot clé en entier. Voici comment l\'obtenir.', 'Bing Site Verification' => 'Vérification Bing Site', 'For the <meta name=\'msvalidate.01\'> tag. Only enter the code in the content=\'\', not the entire tag. Here\'s how to get it.' => 'Pour le mot clé <meta name=\'msvalidate.01\'>. Entrez seulement le code dans le content=\'\', pas le mot clé en entier. Voici comment l\'obtenir.', 'Google Analytics Tracking ID' => 'ID de suivi Google Analytics', 'If you enter your Google Analytics Tracking ID here, the Google Analytics script tags will be included in your <head> (the script is not included if devMode is on or during Live Preview). Only enter the ID, e.g.: UA-XXXXXX-XX, not the entire script code. Here\'s how to get it.' => 'Si vous entrez votre numéro de suivi Google Analytics ici, les mots clés du script de Google Analytics seront inclus dans votre <head> (le script n\'est pas inclu si devMode est activé ou pendant l\'aperçu en temps-réel). N\'entrez que l\'ID, ex: UA-XXXXXX-XX, pas le script en entier. Voici comment l\'obtenir.', 'Automatically send Google Analytics PageView' => 'Envoyer automatiquement une PageView à Google Analytics', 'Controls whether the Google Analytics script automatically sends a PageView to Google Analytics when your pages are loaded' => 'Contrôle si le script de Google Analytics envoi automatiquement une PageView à Google Analytics quand vos pages sont chargées', 'Google Analytics Plugins' => 'Plugins Google Analytics', 'Select which Google Analytics plugins to enable. Learn More' => 'Sélectionnez quel plugin Google Analytics activer. En savoir plus', 'Display Features' => 'Fonctionnalités d\'affichage', 'Ecommerce' => 'Ecommerce', 'Enhanced Ecommerce' => 'Ecommerce amélioré', 'Enhanced Link Attribution' => 'Attribution de liens amélioré', 'Linker' => 'Linker', 'Site Owner Entity Type' => 'Type d\'entité du propriétaire du site', 'The type of entity that owns this website. Choose as general or specific of an Entity Type as you wish. Leave a sub-type blank if you don\'t want to specify a sub-type.' => 'Le type d\'entité du propriétaire du site. Choisissez un type d\'entité aussi général que spécifique, à votre guise. Laissez une sous-catégorie vide si vous ne voulez pas la spécifier.', 'Airline' => 'Compagnie aérienne', 'Educational Organization' => 'Organisation éducationnelle', 'Government Organization' => 'Organisation gouvernementale', 'Non-Government Organization' => 'Organisation non-gouvernementale', 'Performing Group' => 'Groupe d\'interprètes', 'Sports Organization' => 'Organisation sportive', 'The name of the entity that owns the website' => 'Le nom de l\'entité à qui appartient le site web', 'An alternate or nickname for the entity that owns the website' => 'Un autre nom ou un surnom pour l\'entité à qui appartient le site web', 'A description of the entity that owns the website' => 'Une description de l\'entité à qui appartient le site web', 'A URL for the entity that owns the website' => 'Une adresse URL pour l\'entité à qui appartient le site web', 'An image or logo that represents the entity that owns the website' => 'Une image ou un logo qui représente l\'entité qui possède le site web', 'Select Brand Image' => 'Sélectionner une image de marque', 'The primary contact telephone number for the entity that owns the website' => 'Le numéro de téléphone de contact principal de l\'entité qui possède le site web', 'The primary contact email address for the entity that owns the website' => 'L\'adresse courriel de contact principale de l\'entité qui possède le site web', 'The latitude of the location of the entity that owns the website, e.g.: -120.5436367' => 'La latitude de l\'emplacement de l\'entité qui possède le site web, ex: -120.5436367', 'The longitude of the location of the entity that owns the website, e.g.: 80.6033588' => 'La longitude de l\'emplacement de l\'entité qui possède le site web, ex: 80.6033588', 'The street address of the entity that owns the website, e.g.: 123 Main Street' => 'L\'adresse de rue de l\'entité qui possède le site web, ex: 123 Main Street', 'The locality of the entity that owns the website, e.g.: Portchester' => 'La ville e l\'entité qui possède le site web, ex: Portchester', 'The region of the entity that owns the website, e.g.: New York or NY' => 'La province de l\'entité qui possède le site web, ex: New York or NY', 'The postal code of the entity that owns the website, e.g.: 14580' => 'Le code postal de l\'entité qui possède le site web, ex: 14580', 'The country in which the entity that owns the website is located, e.g.: US' => 'Le pays où l\'entité qui possède le site web est située, ex: US', 'The DUNS (Dunn & Bradstreet) number of the organization/company/restaurant that owns the website' => 'Le numéro DUNS de l\'entité qui possède le site web', 'The name of the founder of the organization/company/restaurant' => 'Le nom du fondateur de l\'entité qui possède le site web', 'The date the organization/company/restaurant was founded' => 'La date à laquelle l\'entité qui possède le site web a été fondée', 'The location where the organization/company/restaurant was founded' => 'L\'endroit où l\'entité qui possède le site web a été fondée', 'Local Business Info' => 'Informations de l\'entreprise locale', 'Opening Hours' => 'Heures d\'ouverture', 'The opening hours for this local business. If the business is closed on a given day, just leave the hours for that day blank. If you leave everything blank, no opening hours will be listed.' => 'Les heures d\'ouverture de cette entreprise locale. Si l\'entreprise est fermée à un jour donné, simplement laisser les heures pour ce jour vides. Si vous laissez tout vide, aucunes heures d\'ouverture ne seront affichées.', 'Food Establishment Info' => 'Informations de l\'établissement alimentaire', 'Food Establishment Cuisine' => 'Cuisine de l\'établissement alimentaire', 'The primary type of cuisine that the food establishment serves' => 'La principale sorte de cuisine que cet établissement alimentaire sert', 'Food Establishment Menu URL' => 'URL du menu de l\'établissement alimentaire', 'URL to the food establishment\'s menu' => 'URL vers le menu de l\'établissement alimentaire', 'Food Establishment Reservations URL' => 'URL de réservation pour l\'établissement alimentaire', 'URL to the food establishment\'s reservations page' => 'URL to the food establishment\'s reservations page', '

These Site Identity settings are used to globally define the identity and ownership of the website.

They are used in combination with the SEO Template Meta & SEO Entry Meta settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

The Site Owner type determines the JSON-LD schema that will be used to identity the website to search engines.

Leave any fields blank that aren\'t applicable or which you do not want as part of the SEO schema.

' => '

Ces paramètres de l\'identité du site sont utilisés pour définir de façon générale l\'identité et la propriété du site web.

Ils sont utilisés de concert avec les paramètres Meta du gabarit SEO et le Meta d\'entrée SEO pour générer des microdonnées JSON-LD, des métadonnées du noyau Dublin Core, Twitter Cards, Facebook OpenGraph, et ainsi que les mots clés Meta HTML.

Le type de propriétaire du site web détermine le schéma JSON-LD qui sera utilisé pour identifier le site web aux moteurs de recherche.

Laissez les champs qui ne sont pas applicables ou que vous ne voulez pas voir dans le schéma SEO vides.

', 'json-ld/_json-ld_core' => 'json-ld/_json-ld_core', '{% if key == ' => '{% if key == ', 'Delete' => 'Supprimer', 'Are you sure you want to delete this Template Meta?' => 'êtes vous certain de vouloir supprimer ce gabarit de Meta?', 'Edit' => 'Éditer', '

These SEO Meta settings are used to render the SEO Meta for the website. You can create any number of SEO Template Metas associated with your Twig templates on the website.

They are used in combination with the Site Identity & Social Media settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

If a no Template Meta exists for a template, the SEO Site Meta is used.

If any fields are left blank in a Template Meta, those fields are pulled from the SEO Site Meta.

You can also dynamically change the seomaticMeta.* variables in your Twig templates, and they will appear in the rendered SEO Meta.

' => '

Ces paramètres de meta SEO sont utilisés pour faire le rendu des Meta SEO pour le site web. Vous pouvez créer autant de gabarits SEO associés à votre gabarit Twig sur le site web.

They are used in combination with the Site Identity & Social Media settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

If a no Template Meta exists for a template, the SEO Site Meta is used.

Si des champs sont laissés vides dans un Template Meta, ces champs sont écartés du SEO Site Meta.

You can also dynamically change the seomaticMeta.* variables in your Twig templates, and they will appear in the rendered SEO Meta.

', 'Enter the path to the template to associate this meta with (just as you would on the Section settings). It will override the SEO Site Meta for this template. Leave any field blank if you want it to fall back on the default global settings for that field.' => 'Enter the path to the template to associate this meta with (just as you would on the Section settings). It will override the SEO Site Meta for this template. Leave any field blank if you want it to fall back on the default global settings for that field.', 'Google ignores SEO Keywords tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on.' => 'Google ignores SEO Keywords tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on.', 'Google ignores this tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on.' => 'Google ignores this tag; though other search engines do look at it. Utilize it carefully, as improper or spammy use most likely will hurt you, or even have your site marked as spam. Avoid overstuffing the keywords and do not include keywords that are not related to the specific page you place them on.', 'Set to "0" for unlimited views.' => 'Mettre à "0" pour des vues illimitées.', 'Enabled' => 'Activé', 'New Template Meta' => 'Nouvelle Meta du gabarit', 'Plugin Name' => 'Nom du plugin', 'The plugin name as you\'d like it to be displayed in the AdminCP.' => 'Le nom du plugin que vous aimeriez voir s\'afficher dans le panneau de contrôle administrateur.', 'Site SEO Name' => 'Nom SEO du site', 'This field is used wherever the name of the site is referenced, both at the trailing end of the <title> tag, and in other meta tags on the site. It is initially set to your Craft {{ siteName }}.' => 'Ce champ est utilisé là où le nom du site est référencé, à la fois à la fin de la balise <title>, et dans d\'autres balises meta sur le site. C\'est initialement configuré à votre {{ siteName }} Craft.', 'Site SEO Title' => 'Titre SEO du site', 'Site SEO Name Placement' => 'Positionnement du nom SEO du site', 'Where the Site SEO Name is placed relative to the Title in the <title> tag' => 'Là où le nom SEO du site est placé relativement au titre dans la balise <title>', 'Before' => 'Avant', 'After' => 'Après', 'None' => 'Aucun', 'Site SEO Name Separator' => 'Séparateur du nom SEO du site', 'The character that should be used to separate the Site SEO Name and Title in the <title> tag' => 'Le caractère qui devrait être utilisé pour séparer le nom SEO et le titre dans la balise <title>', 'Site SEO Description' => 'Description SEO du site', 'Site SEO Keywords' => 'Mots clés SEO du site', 'Site SEO Image' => 'Image SEO du site', 'This is the image that will be used for display as the global website brand, as well as on Twitter Cards and Facebook OpenGraph that link to the website. It should be an image that displays well when cropped to a square format (for Twitter)' => 'Ceci est l\'image qui sera utilisée pour afficher comme étant la marque générale du site, de même que sur les cartes Twitter et Facebook OpenGraph qui mènent au site. Ça devrait être une image qui s\'affiche bien lorsqu\'elle est redimensionnée en un format carré (pour Twitter)', 'Site Twitter Card Type' => 'Type de Twitter Cards pour le site', 'With Twitter Cards, you can attach rich photos and information to Tweets that drive traffic to your website. Users who Tweet links to your content will have a “Card” added to the Tweet that’s visible to all of their followers.' => 'Avec les Twitter Cards, vous pouvez joindre des photos riches et des informations aux Tweets qui acheminent du trafic vers votre site.Les utilisateurs qui Tweet des liens vers votre contenu auront une “Card” ajoutée au Tweet qui sera visible pour l\'ensemble de leurs abonnés.', 'Site Facebook Open Graph Type' => 'Type d\'Open Graph Facebook pour le site', 'Adding Open Graph tags to your website influences the performance of your links on social media by allowing you to control what appears when a user posts a link to your content on Facebook.' => 'Ajouter des mots clés Open Graph à votre site web influence la performance de vos liens sur les médias sociaux en vous permettant de contrôler ce qui apparait quand un utilisateur publie un lien vers votre contenu sur Facebook.', 'Site Robots Meta Tag' => 'Balise meta des robots du site', 'SiteLinks Search Box' => 'Barre de recherche SiteLinks', 'With Google Sitelinks search box, from search results. Search users sometimes use navigational queries, typing in the brand name or URL of a known site or app, only to do a more detailed search once they reach their destination.' => 'Avec la barre de recherche Google Sitelinks, des résultats de recherche. Les utilisateurs de la recherche utilisent parfois des requêtes de navigation, en écrivant le nom de la marque ou l\'URL d\'un site ou d\'une application connue, seulement pour faire une recherche plus détaillée une fois leur destination atteinte.', 'Search Targets' => 'Cibles de la recherche', 'This property specifies a search URL pattern for sending queries to your site\'s search engine. It must include a string enclosed in curly braces that is a placeholder for the user\'s search query (e.g., {search_term_string}). The string inside the curly braces must also appear in the name attribute of the query-input property.' => 'Cette propriété spécifie une URL de recherche pour envoyer des requêtes au moteur de recherche de votre site. Elle doit inclure une chaîne jointe dans des accolades qui sera un espace réservé pour les requêtes de recherche des utilisateurs (ex:, {search_term_string}). La chaîne à l\'intérieur des accolades doit également apparaitre dans l\'attribut de la propriété de la requête d\'entrée.', 'Search Target' => 'Cible de la recherche', 'Search Query Input' => 'Requête d\'entrée de la recherche (Query Input)', 'The value for the name attribute of query-input must match the string enclosed inside curly braces in the target property of potentialAction, e.g.: search_term_string' => 'La valeur pour l\'attribut du nom de la requête d\'entrée doit correspondre à la chaîne incluse à l\'intérieur des accolades dans la propriété de la cible de potentialAction, ex: search_term_string', 'robots.txt' => 'robots.txt', 'robots.txt Template' => 'robots.txt Template', '

A robots.txt file is a file at the root of your site that indicates those parts of your site you don’t want accessed by search engine crawlers. The file uses the Robots Exclusion Standard, which is a protocol with a small set of commands that can be used to indicate access to your site by section and by specific kinds of web crawlers (such as mobile crawlers vs desktop crawlers).

SEOmatic automatically handles requests for /robots.txt. For this to work, make sure that you do not have an actual robots.txt file in your public/ folder (because that will take precedence). Also note that SEOmatic currently does not generate a sitemap.xml for you.

This is the template used to render it; you have access to all of the Craft & SEOmatic variables.

This is a full Twig template, so you should use standard {{ myVariable }} or {% set woof = dog.bark %} Twig syntax. Environmental variables must be accessed via {{ craft.config.environmentVariables.myVariable }}

' => 'Un fichier robots.txt est un fichier à la racine de votre site qui indique les sections de votre site que vous ne voulez pas rendre accessibles aux moteurs de recherche. Le fichier utilise le "Robots Exclusion Standard", un protocole avec un petit ensemble de commandes qui peut être utilisé pour indiquer l\'accès à votre site par section et par de spéficiques types de robots d\'indexation (tel que les robots pour mobile et ordinateur de bureau). Également, notez que SEOmatic ne peut actuellement pas générer un sitemap.xml pour vous.

Ceci est le gabarit utilisé pour en faire le rendu; vous avez accès à l\'ensemble des& variables SEOmatic.

Il s\'agit d\'un gabarit entièrement Twig, alors vous devriez utiliser du code standard {{ myVariable }} ou {% set woof = dog.bark %} la syntaxe Twig. Les variables environnementales doivent être accédées par l\'intermédiaire de {{ craft.config.environmentVariables.myVariable }}

', '

These SEO Site Meta settings are used to globally define the Meta for the website. When no SEO Template Meta is found for a webpage, these settings are used by default.

They are used in combination with the SEO Template Meta & SEO Entry Meta settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

If a no Template Meta exists for a template, the SEO Site Meta is used.

If any fields are left blank in a Template Meta, those fields are pulled from the SEO Site Meta.

You can also dynamically change the seomaticMeta.* variables in your Twig templates, and they will appear in the rendered SEO Meta.

' => '

Ces paramètres de Meta SEO du site sont utilisés pour définir de façon générale le Meta pour le site web. Quand aucun gabarit de Meta SEO n\'est trouvé pour une page web, ces paramètres sont utilisés par défaut.

Ils sont utilisés de concert avec les paramètres Meta du gabarit SEO et le Meta d\'entrée SEO pour générer des microdonnées JSON-LD, des métadonnées du noyau Dublin Core, Twitter Cards, Facebook OpenGraph, et ainsi que les mots clés Meta HTML.

If a no Template Meta exists for a template, the SEO Site Meta is used.

Si des champs sont laissés vides dans un Template Meta, ces champs sont écartés du SEO Site Meta.

You can also dynamically change the seomaticMeta.* variables in your Twig templates, and they will appear in the rendered SEO Meta.

', 'Twitter Handle' => 'Profil Twitter', 'Facebook Handle' => 'Profil Facebook', 'Facebook Profile ID' => 'ID de profil Facebook', 'Facebook App ID' => 'ID d\'application Facebook', 'LinkedIn Handle' => 'Profil LinkedIn', 'Google+ Handle' => 'Profil Google+', 'YouTube User Handle' => 'Profil utilisateur YouTube', 'YouTube Channel Handle' => 'Profil chaîne YouTube', 'Instagram Handle' => 'Profil Instagram', 'Pinterest Handle' => 'Profil Pinterest', 'Github Handle' => 'Profil Github', '

These Social Media settings are used to globally define the social media accounts associated with the website.

They are used in combination with the SEO Meta settings to generate JSON-LD microdata, Dublin Core core metadata, Twitter Cards, Facebook OpenGraph, and as well as HTML meta tags.

None of these fields are mandatory; if you don\'t have a given social media account, just leave it blank.

' => '

Ces paramètres de médias sociaux sont utilisés pour définir de façon générale les comptes de réseaux sociaux associés au site web.

Ils sont utilisés de concert avec les paramètres Meta du gabarit SEO et le Meta d\'entrée SEO pour générer des microdonnées JSON-LD, des métadonnées du noyau Dublin Core, Twitter Cards, Facebook OpenGraph, et ainsi que les mots clés Meta HTML.

Laissez les champs qui ne sont pas applicables vides.

', 'Welcome' => 'Bienvenue', ); ================================================ FILE: translations/nl.php ================================================ 'Site Ontwikkelaar', 'Site Identity' => 'Site Identiteit', 'Google Site Verification' => 'Google Site Verificatie', 'Corporation' => 'Corporatie', 'Organization' => 'Organisatie', 'Person' => 'Persoon', 'General Info' => 'Algemene Informatie', 'Site SEO Title' => 'Site SEO titel', 'SEO Title' => 'SEO titel', 'Site SEO Description' => 'Site SEO omschrijving', 'SEO Description' => 'SEO omschrijving', 'Site SEO Image' => 'Site SEO afbeelding', 'SEO Image' => 'SEO afbeelding', 'Site SEO Name' => 'Site SEO naam', 'Site SEO Keywords' => 'Site SEO keywords', 'SEO Keywords' => 'SEO keywords', 'Template Path' => 'Template pad', 'Source:' => 'Bron:', 'Custom Text' => 'Aangepaste tekst', 'Custom Image' => 'Aangepaste afbeelding', 'Select SEO Image' => 'Selecteer SEO afbeelding', 'From Field' => 'Van veld', 'Keywords From Field' => 'Keywords van veld', 'Twitter Handle' => 'Twitter naam', 'Facebook Handle' => 'Facebook naam', 'Facebook Profiel ID' => 'Facebook Profiel ID', 'LinkedIn Handle' => 'LinkedIn naam', 'Google+ Handle' => 'Google+ naam', 'YouTube Handle' => 'YouTube naam', 'Instagram Handle' => 'Instagram naam', 'Pinterest Handle' => 'Pinterest naam', 'New Template Meta' => 'Nieuw Template Meta', 'Untitled Meta' => 'Naamloze Meta', ); ================================================ FILE: twigextensions/SeomaticTwigExtension.php ================================================ request->isSiteRequest() && !$this->seomaticInitializing && !craft()->isConsole()) { $this->seomaticInitializing = true; $element = craft()->urlManager->getMatchedElement(); $entryMeta = craft()->seomatic->getMetaFromElement($element); $entryMetaUrl = ""; if ($entryMeta) craft()->seomatic->setEntryMeta($entryMeta, $entryMetaUrl); $currentTemplate = $this->_get_current_template_path(); $result = craft()->seomatic->getGlobals($currentTemplate, craft()->language); } $this->seomaticInitializing = false; return $result; } /* -------------------------------------------------------------------------------- Return our twig filters -------------------------------------------------------------------------------- */ public function getFilters() { return array( 'renderJSONLD' => new \Twig_Filter_Method($this, 'renderJSONLD'), 'extractKeywords' => new \Twig_Filter_Method($this, 'extractKeywords'), 'extractSummary' => new \Twig_Filter_Method($this, 'extractSummary'), 'truncateStringOnWord' => new \Twig_Filter_Method($this, 'truncateStringOnWord'), 'encodeEmailAddress' => new \Twig_Filter_Method($this, 'encodeEmailAddress'), 'extractTextFromMatrix' => new \Twig_Filter_Method($this, 'extractTextFromMatrix'), 'getLocalizedUrls' => new \Twig_Filter_Method($this, 'getLocalizedUrls'), 'getFullyQualifiedUrl' => new \Twig_Filter_Method($this, 'getFullyQualifiedUrl'), ); } /* -------------------------------------------------------------------------------- Return our twig functions -------------------------------------------------------------------------------- */ public function getFunctions() { return array( 'renderJSONLD' => new \Twig_Function_Method($this, 'renderJSONLD'), 'extractKeywords' => new \Twig_Function_Method($this, 'extractKeywords'), 'extractSummary' => new \Twig_Function_Method($this, 'extractSummary'), 'truncateStringOnWord' => new \Twig_Function_Method($this, 'truncateStringOnWord'), 'encodeEmailAddress' => new \Twig_Function_Method($this, 'encodeEmailAddress'), 'extractTextFromMatrix' => new \Twig_Function_Method($this, 'extractTextFromMatrix'), 'getLocalizedUrls' => new \Twig_Function_Method($this, 'getLocalizedUrls'), 'getFullyQualifiedUrl' => new \Twig_Function_Method($this, 'getFullyQualifiedUrl'), ); } /* -------------------------------------------------------------------------------- Render a generic JSON-LD object, passed in as an array() in the format: PHP: $myJSONLD = array( "type" => "Corporation", "name" => "nystudio107", "sameAs" => ["https://Twitter.com/nystudio107","https://plus.google.com/+nystudio107"], "address" => array( "type" => 'PostalAddress', "addressCountry" => "USA", ), ); Twig: {% set myJSONLD = { "type": "Corporation", "name": "nystudio107", "sameAs": ["https://Twitter.com/nystudio107","https://plus.google.com/+nystudio107"], "address": { "type": 'PostalAddress', "addressCountry": "USA", }, } %} The array can be nested arbitrarily deep with sub-arrays. The first key in the array, and in each sub-array, should be an "type" with a valid Schema.org type as the value. Because Twig doesn't support array keys with non-alphanumeric characters, SEOmatic transforms the keys "type" into "@type" at render time. -------------------------------------------------------------------------------- */ public function renderJSONLD($object=array()) { craft()->seomatic->sanitizeArray($object); $result = craft()->seomatic->renderJSONLD($object); return TemplateHelper::getRaw(rtrim($result)); } /* -- renderJSONLD */ /* -------------------------------------------------------------------------------- Extract the most important words from the passed in text via TextRank -------------------------------------------------------------------------------- */ public function extractKeywords($text = null, $limit = 15, $withoutStopWords = true) { $result = craft()->seomatic->extractKeywords($text, $limit, $withoutStopWords); return $result; } /* -- extractKeywords */ /* -------------------------------------------------------------------------------- Extract a summary from the text, or if it's not long enough, just return the text -------------------------------------------------------------------------------- */ public function extractSummary($text = null, $limit = null, $withoutStopWords = true) { $result = craft()->seomatic->extractSummary($text, $limit, $withoutStopWords); return $result; } /* -- extractSummary */ /* -------------------------------------------------------------------------------- Truncate the the string passed in, breaking it on a word. $desiredLength is in characters; the returned string will be broken on a whole-word boundary, with an … appended to the end if it is truncated -------------------------------------------------------------------------------- */ public function truncateStringOnWord($theString, $desiredLength) { $result = craft()->seomatic->truncateStringOnWord($theString, $desiredLength); return $result; } /* -- truncateStringOnWord */ /* -------------------------------------------------------------------------------- Encode an email address as ordinal values to obfuscate it to bots -------------------------------------------------------------------------------- */ public function encodeEmailAddress($emailAddress) { $result = craft()->seomatic->encodeEmailAddress($emailAddress); return $result; } /* -- encodeEmailAddress */ /* -------------------------------------------------------------------------------- Extract all of the text and rich text from the fields in MatrixBlockModels -------------------------------------------------------------------------------- */ public function extractTextFromMatrix($matrixBlocks) { $result = craft()->seomatic->extractTextFromMatrix($matrixBlocks); return $result; } /* -- extractTextFromMatrix */ /* -------------------------------------------------------------------------------- Returns an array of localized URLs for the current request -------------------------------------------------------------------------------- */ public function getLocalizedUrls() { $result = craft()->seomatic->getLocalizedUrls(); return $result; } /* -- getLocalizedUrls */ /* -------------------------------------------------------------------------------- Get a fully qualified URL based on the siteUrl, if no scheme/host is present -------------------------------------------------------------------------------- */ public function getFullyQualifiedUrl($url) { $result = craft()->seomatic->getFullyQualifiedUrl($url); return $result; } /* -- getFullyQualifiedUrl */ /* -------------------------------------------------------------------------------- Get the current template path -------------------------------------------------------------------------------- */ private function _get_current_template_path() { $result = ""; $currentTemplate = craft()->templates->getRenderingTemplate(); $templatesPath = method_exists(craft()->templates, 'getTemplatesPath') ? craft()->templates->getTemplatesPath() : craft()->path->getTemplatesPath(); // Try to normalize things for Windows $currentTemplate = str_replace('\\', '/', $currentTemplate); $templatesPath = str_replace('\\', '/', $templatesPath); $path_parts = pathinfo($currentTemplate); if ($path_parts && isset($path_parts['dirname']) && isset($path_parts['filename'])) { $result = $path_parts['dirname'] . "/" . $path_parts['filename']; if (substr($result, 0, strlen($templatesPath)) == $templatesPath) { $result = substr($result, strlen($templatesPath)); } } /* -- Handle the below condition by using mysql_real_escape_string() instead, for performance reasons */ /* -- Make sure this template actually exists if ($result && !craft()->templates->doesTemplateExist($result)) $result = ""; */ return $result; } } /* -- class SeomaticTwigExtension */ ================================================ FILE: variables/SeomaticVariable.php ================================================ "Corporation", "name" => "nystudio107", "sameAs" => ["https://Twitter.com/nystudio107","https://plus.google.com/+nystudio107"], "address" => array( "type" => 'PostalAddress', "addressCountry" => "USA", ), ); Twig: {% set myJSONLD = { "type": "Corporation", "name": "nystudio107", "sameAs": ["https://Twitter.com/nystudio107","https://plus.google.com/+nystudio107"], "address": { "type": 'PostalAddress', "addressCountry": "USA", }, } %} The array can be nested arbitrarily deep with sub-arrays. The first key in the array, and in each sub-array, should be an "type" with a valid Schema.org type as the value. Because Twig doesn't support array keys with non-alphanumeric characters, SEOmatic transforms the keys "type" into "@type" at render time. -------------------------------------------------------------------------------- */ public function renderJSONLD($object=array()) { craft()->seomatic->sanitizeArray($object); $result = craft()->seomatic->renderJSONLD($object); return TemplateHelper::getRaw(rtrim($result)); } /* -- renderJSONLD */ /* -------------------------------------------------------------------------------- Extract the most important words from the passed in text via TextRank -------------------------------------------------------------------------------- */ public function extractKeywords($text = null, $limit = 15, $withoutStopWords = true) { $result = craft()->seomatic->extractKeywords($text, $limit, $withoutStopWords); return $result; } /* -- extractKeywords */ /* -------------------------------------------------------------------------------- Extract a summary from the text, or if it's not long enough, just return the text -------------------------------------------------------------------------------- */ public function extractSummary($text = null, $limit = null, $withoutStopWords = true) { $result = craft()->seomatic->extractSummary($text, $limit, $withoutStopWords); return $result; } /* -- extractSummary */ /* -------------------------------------------------------------------------------- Truncate the the string passed in, breaking it on a word. $desiredLength is in characters; the returned string will be broken on a whole-word boundary, with an … appended to the end if it is truncated -------------------------------------------------------------------------------- */ public function truncateStringOnWord($theString, $desiredLength) { $result = craft()->seomatic->truncateStringOnWord($theString, $desiredLength); return $result; } /* -- truncateStringOnWord */ /* -------------------------------------------------------------------------------- Encode an email address as ordinal values to obfuscate it to bots -------------------------------------------------------------------------------- */ public function encodeEmailAddress($emailAddress) { $result = craft()->seomatic->encodeEmailAddress($emailAddress); return $result; } /* -- encodeEmailAddress */ /* -------------------------------------------------------------------------------- Extract all of the text and rich text from the fields in MatrixBlockModels -------------------------------------------------------------------------------- */ public function extractTextFromMatrix($matrixBlocks) { $result = craft()->seomatic->extractTextFromMatrix($matrixBlocks); return $result; } /* -- extractTextFromMatrix */ /* -------------------------------------------------------------------------------- Returns an array of localized URLs for the current request -------------------------------------------------------------------------------- */ public function getLocalizedUrls() { $result = craft()->seomatic->getLocalizedUrls(); return $result; } /* -- getLocalizedUrls */ /* -------------------------------------------------------------------------------- Get a fully qualified URL based on the siteUrl, if no scheme/host is present -------------------------------------------------------------------------------- */ public function getFullyQualifiedUrl($url) { $result = craft()->seomatic->getFullyQualifiedUrl($url); return $result; } /* -- getFullyQualifiedUrl */ /* ================================================================================ INTERNAL methods for SEOmatic use ================================================================================ */ /* -------------------------------------------------------------------------------- Render the SEOmatic template -------------------------------------------------------------------------------- */ function render($templatePath="", $metaVars=null) { if ($metaVars) $result = craft()->seomatic->render($templatePath, $metaVars); else $result = craft()->seomatic->render($templatePath); return rtrim($result); } /* -- render */ /* -------------------------------------------------------------------------------- Render the SEOmatic preview template -------------------------------------------------------------------------------- */ function renderPreview($templatePath="", $forTemplate="", $elementId=null, $locale=null) { $entryMeta = null; if (!$locale) $locale = craft()->language; if ($elementId) { $element = craft()->elements->getElementById($elementId, null, $locale); if ($element) { $entryMeta = craft()->seomatic->getMetaFromElement($element); if ($entryMeta) craft()->seomatic->setEntryMeta($entryMeta, $element->url); } } $metaVars = craft()->seomatic->getGlobals($forTemplate, $locale); /* -- Fudge the canonicalUrl for the preview */ if (!$entryMeta) { $siteUrl = craft()->getSiteUrl(); if (($siteUrl[strlen($siteUrl) -1] != '/') && $forTemplate) { $siteUrl = $siteUrl + '/'; } $fullUrl = $siteUrl . $forTemplate; $metaVars['seomaticMeta']['canonicalUrl'] = $fullUrl; if (isset($metaVars['seomaticMeta']['og'])) $metaVars['seomaticMeta']['og']['url'] = $fullUrl; } $result = craft()->seomatic->render($templatePath, $metaVars, true); return rtrim($result); } /* -- renderPreview */ /* -------------------------------------------------------------------------------- Render the SEOmatic display preview template -------------------------------------------------------------------------------- */ function renderDisplayPreview($templateName="", $forTemplate="", $elementId=null, $locale=null) { $entryMeta = null; if (!$locale) $locale = craft()->language; if ($elementId) { $element = craft()->elements->getElementById($elementId, null, $locale); if ($element) { $entryMeta = craft()->seomatic->getMetaFromElement($element); if ($entryMeta) craft()->seomatic->setEntryMeta($entryMeta, $element->url); } } $metaVars = craft()->seomatic->getGlobals($forTemplate, $locale); /* -- Fudge the canonicalUrl for the preview */ if (!$entryMeta) { $siteUrl = craft()->getSiteUrl(); if (($siteUrl[strlen($siteUrl) -1] != '/') && $forTemplate) { $siteUrl = $siteUrl + '/'; } $fullUrl = $siteUrl . $forTemplate; $metaVars['seomaticMeta']['canonicalUrl'] = $fullUrl; if (isset($metaVars['seomaticMeta']['og'])) $metaVars['seomaticMeta']['og']['url'] = $fullUrl; } $result = craft()->seomatic->renderDisplayPreview($templateName, $metaVars); return rtrim($result); } /* -- renderDisplayPreview */ /* -------------------------------------------------------------------------------- Render the SEOmatic Identity template -------------------------------------------------------------------------------- */ function renderIdentity($elementId=null, $locale=null, $isPreview=false) { if (!$locale) $locale = craft()->language; if ($elementId) { $element = craft()->elements->getElementById($elementId, null, $locale); if ($element) { $entryMeta = craft()->seomatic->getMetaFromElement($element); if ($entryMeta) craft()->seomatic->setEntryMeta($entryMeta, $element->url); } } $metaVars = craft()->seomatic->getGlobals('', $locale); $result = craft()->seomatic->renderIdentity($metaVars, $locale, $isPreview); return rtrim($result); } /* -- renderIdentity */ /* -------------------------------------------------------------------------------- Render the SEOmatic Website template -------------------------------------------------------------------------------- */ function renderWebsite($elementId=null, $locale=null, $isPreview=false) { if (!$locale) $locale = craft()->language; if ($elementId) { $element = craft()->elements->getElementById($elementId, null, $locale); if ($element) { $entryMeta = craft()->seomatic->getMetaFromElement($element); if ($entryMeta) craft()->seomatic->setEntryMeta($entryMeta, $element->url); } } $metaVars = craft()->seomatic->getGlobals('', $locale); $result = craft()->seomatic->renderWebsite($metaVars, $locale, $isPreview); return rtrim($result); } /* -- renderWebsite */ /* -------------------------------------------------------------------------------- Render the Main Enity of Page JSON-LD -------------------------------------------------------------------------------- */ function renderMainEntityOfPage($elementId=null, $locale=null, $isPreview=false) { if (!$locale) $locale = craft()->language; if ($elementId) { $element = craft()->elements->getElementById($elementId, null, $locale); if ($element) { $entryMeta = craft()->seomatic->getMetaFromElement($element); if ($entryMeta) craft()->seomatic->setEntryMeta($entryMeta, $element->url); } } $metaVars = craft()->seomatic->getGlobals('', $locale); $result = craft()->seomatic->renderMainEntityOfPage($metaVars, $locale, $isPreview); return rtrim($result); } /* -- renderMainEntityOfPage */ /* -------------------------------------------------------------------------------- Render the Breadcrumbs JSON-LD -------------------------------------------------------------------------------- */ function renderBreadcrumbs($elementId=null, $locale=null, $isPreview=false) { if (!$locale) $locale = craft()->language; if ($elementId) { $element = craft()->elements->getElementById($elementId, null, $locale); if ($element) { $entryMeta = craft()->seomatic->getMetaFromElement($element); if ($entryMeta) craft()->seomatic->setEntryMeta($entryMeta, $element->url); } } $metaVars = craft()->seomatic->getGlobals('', $locale); $result = craft()->seomatic->renderBreadcrumbs($metaVars, $locale, $isPreview); return rtrim($result); } /* -- renderBreadcrumbs */ /* -------------------------------------------------------------------------------- Render the SEOmatic Place template -------------------------------------------------------------------------------- */ function renderPlace($elementId=null, $locale=null, $isPreview=false) { if (!$locale) $locale = craft()->language; if ($elementId) { $element = craft()->elements->getElementById($elementId, null, $locale); if ($element) { $entryMeta = craft()->seomatic->getMetaFromElement($element); if ($entryMeta) craft()->seomatic->setEntryMeta($entryMeta, $element->url); } } $metaVars = craft()->seomatic->getGlobals('', $locale); $result = craft()->seomatic->renderPlace($metaVars, $locale, $isPreview); return rtrim($result); } /* -- renderPlace */ /* -------------------------------------------------------------------------------- Render the Google Tag Manager `is', '', $strText); $strText = preg_replace('`\]*>`is', '.', $strText); $strText = html_entity_decode($strText); $strText = strip_tags($strText); // Assume blank lines (i.e., paragraph breaks) end sentences (useful // for titles in plain text documents) and replace remaining new // lines with spaces $strText = preg_replace('`(\r\n|\n\r)`is', "\n", $strText); $strText = preg_replace('`(\r|\n){2,}`is', ".\n\n", $strText); $strText = preg_replace('`[ ]*(\n|\r\n|\r)[ ]*`', ' ', $strText); // Replace commas, hyphens, quotes etc (count as spaces) $strText = preg_replace('`[",:;()/\`-]`', ' ', $strText); // Unify terminators and spaces $strText = trim($strText, '. ') . '.'; // Add final terminator. $strText = preg_replace('`[\.!?]`', '.', $strText); // Unify terminators $strText = preg_replace('`([\.\s]*\.[\.\s]*)`mis', '. ', $strText); // Merge terminators separated by whitespace. $strText = preg_replace('`[ ]+`', ' ', $strText); // Remove multiple spaces $strText = preg_replace('`([\.])[\. ]+`', '$1', $strText); // Check for duplicated terminators $strText = trim(preg_replace('`[ ]*([\.])`', '$1 ', $strText)); // Pad sentence terminators // Lower case all words following terminators (for gunning fog score) $strText = preg_replace_callback('`\. [^\. ]`', create_function('$matches', 'return strtolower($matches[0]);'), $strText); $strText = trim($strText); // Cache it and return self::$clean[$key] = $strText; return $strText; } /** * Converts string to lower case. Tries mb_strtolower and if that fails uses regular strtolower. * @param string $strText Text to be transformed * @param string $strEncoding Encoding of text * @return string */ public static function lowerCase($strText, $strEncoding = '') { if (is_null(self::$blnMbstring)) { self::$blnMbstring = extension_loaded('mbstring'); } if (!self::$blnMbstring) { $strLowerCaseText = strtolower($strText); } else { if ($strEncoding == '') { $strLowerCaseText = mb_strtolower($strText); } else { $strLowerCaseText = mb_strtolower($strText, $strEncoding); } } return $strLowerCaseText; } /** * Converts string to upper case. Tries mb_strtoupper and if that fails uses regular strtoupper. * @param string $strText Text to be transformed * @param string $strEncoding Encoding of text * @return string */ public static function upperCase($strText, $strEncoding = '') { if (is_null(self::$blnMbstring)) { self::$blnMbstring = extension_loaded('mbstring'); } if (!self::$blnMbstring) { $strUpperCaseText = strtoupper($strText); } else { if ($strEncoding == '') { $strUpperCaseText = mb_strtoupper($strText); } else { $strUpperCaseText = mb_strtoupper($strText, $strEncoding); } } return $strUpperCaseText; } /** * Gets portion of string. Tries mb_substr and if that fails uses regular substr. * @param string $strText Text to be cut up * @param int $intStart Start character * @param int $intLength Length * @param string $strEncoding Encoding of text * @return string */ public static function substring($strText, $intStart, $intLength, $strEncoding = '') { if (is_null(self::$blnMbstring)) { self::$blnMbstring = extension_loaded('mbstring'); } if (!self::$blnMbstring) { $strSubstring = substr($strText, $intStart, $intLength); } else { if ($strEncoding == '') { $strSubstring = mb_substr($strText, $intStart, $intLength); } else { $strSubstring = mb_substr($strText, $intStart, $intLength, $strEncoding); } } return $strSubstring; } /** * Gives string length. Tries mb_strlen and if that fails uses regular strlen. * @param string $strText Text to be measured * @param string $strEncoding Encoding of text * @return int */ public static function textLength($strText, $strEncoding = '') { if (is_null(self::$blnMbstring)) { self::$blnMbstring = extension_loaded('mbstring'); } if (!self::$blnMbstring) { $intTextLength = strlen($strText); } else { if ($strEncoding == '') { $intTextLength = mb_strlen($strText); } else { $intTextLength = mb_strlen($strText, $strEncoding); } } return $intTextLength; } /** * Alias for textLength, as "letterCount", "wordCount" etc also used * @param string $strText Text to be measured * @param string $strEncoding Encoding of text * @return int */ public static function characterCount($strText, $strEncoding = '') { return self::textLength($strText, $strEncoding); } /** * Gives letter count (ignores all non-letters). Tries mb_strlen and if * that fails uses regular strlen. * @param string $strText Text to be measured * @param string $strEncoding Encoding of text * @return int */ public static function letterCount($strText, $strEncoding = '') { if (strlen(trim($strText)) == 0) { return 0; } if (is_null(self::$blnMbstring)) { self::$blnMbstring = extension_loaded('mbstring'); } $strText = self::cleanText($strText); // To clear out newlines etc $intTextLength = 0; $strText = preg_replace('`[^A-Za-z]+`', '', $strText); try { if (!self::$blnMbstring) { throw new Exception('The extension mbstring is not loaded.'); } if ($strEncoding == '') { $intTextLength = mb_strlen($strText); } else { $intTextLength = mb_strlen($strText, $strEncoding); } } catch (\Exception $e) { $intTextLength = strlen($strText); } return $intTextLength; } /** * Returns word count for text. * @param string $strText Text to be measured * @param string $strEncoding Encoding of text * @return int */ public static function wordCount($strText, $strEncoding = '') { if (strlen(trim($strText)) == 0) { return 0; } // Will be tripped by em dashes with spaces either side, among other similar characters $intWords = 1 + self::textLength(preg_replace('`[^ ]`', '', $strText), $strEncoding); // Space count + 1 is word count return $intWords; } /** * Returns sentence count for text. * @param string $strText Text to be measured * @param string $strEncoding Encoding of text * @return int */ public static function sentenceCount($strText, $strEncoding = '') { if (strlen(trim($strText)) == 0) { return 0; } // Will be tripped up by "Mr." or "U.K.". Not a major concern at this point. $intSentences = max(1, self::textLength(preg_replace('`[^\.!?]`', '', $strText), $strEncoding)); return $intSentences; } /** * Returns average words per sentence for text. * @param string $strText Text to be measured * @param string $strEncoding Encoding of text * @return int|float */ public static function averageWordsPerSentence($strText, $strEncoding = '') { $intSentenceCount = self::sentenceCount($strText, $strEncoding); $intWordCount = self::wordCount($strText, $strEncoding); $averageWords = (Maths::bcCalc($intWordCount, '/', $intSentenceCount)); return $averageWords; } } ================================================ FILE: vendor/davechild/textstatistics/src/DaveChild/TextStatistics/TextStatistics.php ================================================ flesch_kincaid_reading_ease($text); */ class TextStatistics { /** * @var string $strEncoding Used to hold character encoding to be used * by object, if set */ protected $strEncoding = ''; /** * @var bool $normalise Should the result be normalised? */ public $normalise = true; /** * @var int $dps How many decimal places should results be given to? */ public $dps = 1; /** * @var string $strText Holds the last text checked. If no text passed to * function, it will use this text instead. */ private static $strText = false; /** * Constructor. * * @param string $strEncoding Optional character encoding. * @return void */ public function __construct($strEncoding = '') { if ($strEncoding != '') { // Encoding is given. Use it! $this->strEncoding = $strEncoding; } } /** * Set the text to measure the readability of. * @param string|boolean $strText Text to be checked * @return string Cleaned text */ public function setText($strText) { // If text passed in, clean it up and store it for subsequent queries if ($strText !== false) { self::$strText = Text::cleanText($strText); } return self::$strText; } /** * Set the encoding of the text being measured. * @param string $strEncoding New encoding * @return boolean */ public function setEncoding($strEncoding) { $this->strEncoding = $strEncoding; return true; } /** * Gives the Flesch-Kincaid Reading Ease of text entered rounded to one digit * @param boolean|string $strText Text to be checked * @return int|float */ public function fleschKincaidReadingEase($strText = false) { $strText = $this->setText($strText); $score = Maths::bcCalc( Maths::bcCalc( 206.835, '-', Maths::bcCalc( 1.015, '*', Text::averageWordsPerSentence($strText, $this->strEncoding) ) ), '-', Maths::bcCalc( 84.6, '*', Syllables::averageSyllablesPerWord($strText, $this->strEncoding) ) ); if ($this->normalise) { return Maths::normaliseScore($score, 0, 100, $this->dps); } else { return Maths::bcCalc($score, '+', 0, true, $this->dps); } } /** * Gives the Flesch-Kincaid Grade level of text entered rounded to one digit * @param boolean|string $strText Text to be checked * @return int|float */ public function fleschKincaidGradeLevel($strText = false) { $strText = $this->setText($strText); $score = Maths::bcCalc( Maths::bcCalc( 0.39, '*', Text::averageWordsPerSentence($strText, $this->strEncoding) ), '+', Maths::bcCalc( Maths::bcCalc( 11.8, '*', Syllables::averageSyllablesPerWord($strText, $this->strEncoding) ), '-', 15.59 ) ); if ($this->normalise) { return Maths::normaliseScore($score, 0, 12, $this->dps); } else { return Maths::bcCalc($score, '+', 0, true, $this->dps); } } /** * Gives the Gunning-Fog score of text entered rounded to one digit * @param boolean|string $strText Text to be checked * @return int|float */ public function gunningFogScore($strText = false) { $strText = $this->setText($strText); $score = Maths::bcCalc( Maths::bcCalc( Text::averageWordsPerSentence($strText, $this->strEncoding), '+', Syllables::percentageWordsWithThreeSyllables($strText, false, $this->strEncoding) ), '*', '0.4' ); if ($this->normalise) { return Maths::normaliseScore($score, 0, 19, $this->dps); } else { return Maths::bcCalc($score, '+', 0, true, $this->dps); } } /** * Gives the Coleman-Liau Index of text entered rounded to one digit * @param boolean|string $strText Text to be checked * @return int|float */ public function colemanLiauIndex($strText = false) { $strText = $this->setText($strText); $score = Maths::bcCalc( Maths::bcCalc( Maths::bcCalc( 5.89, '*', Maths::bcCalc( Text::letterCount($strText, $this->strEncoding), '/', Text::wordCount($strText, $this->strEncoding) ) ), '-', Maths::bcCalc( 0.3, '*', Maths::bcCalc( Text::sentenceCount($strText, $this->strEncoding), '/', Text::wordCount($strText, $this->strEncoding) ) ) ), '-', 15.8 ); if ($this->normalise) { return Maths::normaliseScore($score, 0, 12, $this->dps); } else { return Maths::bcCalc($score, '+', 0, true, $this->dps); } } /** * Gives the SMOG Index of text entered rounded to one digit * @param boolean|string $strText Text to be checked * @return int|float */ public function smogIndex($strText = false) { $strText = $this->setText($strText); $score = Maths::bcCalc( 1.043, '*', Maths::bcCalc( Maths::bcCalc( Maths::bcCalc( Syllables::wordsWithThreeSyllables($strText, true, $this->strEncoding), '*', Maths::bcCalc( 30, '/', Text::sentenceCount($strText, $this->strEncoding) ) ), '+', 3.1291 ), 'sqrt', 0 ) ); if ($this->normalise) { return Maths::normaliseScore($score, 0, 12, $this->dps); } else { return Maths::bcCalc($score, '+', 0, true, $this->dps); } } /** * Gives the Automated Readability Index of text entered rounded to one digit * @param boolean|string $strText Text to be checked * @return int|float */ public function automatedReadabilityIndex($strText = false) { $strText = $this->setText($strText); $score = Maths::bcCalc( Maths::bcCalc( 4.71, '*', Maths::bcCalc( Text::letterCount($strText, $this->strEncoding), '/', Text::wordCount($strText, $this->strEncoding) ) ), '+', Maths::bcCalc( Maths::bcCalc( 0.5, '*', Maths::bcCalc( Text::wordCount($strText, $this->strEncoding), '/', Text::sentenceCount($strText, $this->strEncoding) ) ), '-', 21.43 ) ); if ($this->normalise) { return Maths::normaliseScore($score, 0, 12, $this->dps); } else { return Maths::bcCalc($score, '+', 0, true, $this->dps); } } /** * Gives the Dale-Chall readability score of text entered rounded to one digit * @param boolean|string $strText Text to be checked * @return int|float */ public function daleChallReadabilityScore($strText = false) { $strText = $this->setText($strText); $score = Maths::bcCalc( Maths::bcCalc( 0.1579, '*', Maths::bcCalc( 100, '*', Maths::bcCalc( $this->daleChallDifficultWordCount($strText), '/', Text::wordCount($strText, $this->strEncoding) ) ) ), '+', Maths::bcCalc( 0.0496, '*', Maths::bcCalc( Text::wordCount($strText, $this->strEncoding), '/', Text::sentenceCount($strText, $this->strEncoding) ) ) ); if ($this->normalise) { return Maths::normaliseScore($score, 0, 10, $this->dps); } else { return Maths::bcCalc($score, '+', 0, true, $this->dps); } } /** * Gives the Spache readability score of text entered rounded to one digit * @param boolean|string $strText Text to be checked * @return int|float */ public function spacheReadabilityScore($strText = false) { $strText = $this->setText($strText); $score = Maths::bcCalc( Maths::bcCalc( Maths::bcCalc( 0.121, '*', Maths::bcCalc( Text::wordCount($strText, $this->strEncoding), '/', Text::sentenceCount($strText, $this->strEncoding) ) ), '+', Maths::bcCalc( 0.082, '*', $this->spacheDifficultWordCount($strText) ) ), '+', 0.659 ); if ($this->normalise) { return Maths::normaliseScore($score, 0, 5, $this->dps); // Not really suitable for measuring readability above grade 4 } else { return Maths::bcCalc($score, '+', 0, true, $this->dps); } } /** * Returns the number of words NOT on the Dale-Chall easy word list * @param boolean|string $strText Text to be measured * @return int */ public function daleChallDifficultWordCount($strText = false) { $strText = $this->setText($strText); $intDifficultWords = 0; $arrWords = explode(' ', Text::lowerCase(preg_replace('`[^A-za-z\' ]`', '', $strText), $this->strEncoding)); // Fetch Dale-Chall Words $arrDaleChall = Resource::fetchDaleChallWordList(); for ($i = 0, $intWordCount = count($arrWords); $i < $intWordCount; $i++) { // Single letters are counted as easy if (strlen(trim($arrWords[$i])) < 2) { continue; } if ((!in_array(Pluralise::getPlural($arrWords[$i]), $arrDaleChall)) && (!in_array(Pluralise::getSingular($arrWords[$i]), $arrDaleChall))) { $intDifficultWords++; } } return $intDifficultWords; } /** * Returns the number of unique words NOT on the Spache easy word list * @param boolean|string $strText Text to be measured * @return int */ public function spacheDifficultWordCount($strText = false) { $strText = $this->setText($strText); $intDifficultWords = 0; $arrWords = explode(' ', strtolower(preg_replace('`[^A-za-z\' ]`', '', $strText))); // Fetch Spache Words $wordsCounted = array(); // Get the Spache word list $arrSpache = Resource::fetchSpacheWordList(); for ($i = 0, $intWordCount = count($arrWords); $i < $intWordCount; $i++) { // Single letters are counted as easy if (strlen(trim($arrWords[$i])) < 2) { continue; } $singularWord = Pluralise::getSingular($arrWords[$i]); if ((!in_array(Pluralise::getPlural($arrWords[$i]), $arrSpache)) && (!in_array($singularWord, $arrSpache))) { if (!in_array($singularWord, $wordsCounted)) { $intDifficultWords++; $wordsCounted[] = $singularWord; } } } return $intDifficultWords; } /** * Returns letter count for text. * @param boolean|string $strText Text to be measured * @return int */ public function letterCount($strText = false) { $strText = $this->setText($strText); return Text::letterCount($strText, $this->strEncoding); } /** * Returns sentence count for text. * @param boolean|string $strText Text to be measured * @return int */ public function sentenceCount($strText = false) { $strText = $this->setText($strText); return Text::sentenceCount($strText, $this->strEncoding); } /** * Returns word count for text. * @param boolean|string $strText Text to be measured * @return int */ public function wordCount($strText = false) { $strText = $this->setText($strText); return Text::wordCount($strText, $this->strEncoding); } /** * Returns average words per sentence for text. * @param boolean|string $strText Text to be measured * @return int|float */ public function averageWordsPerSentence($strText = false) { $strText = $this->setText($strText); return Text::averageWordsPerSentence($strText, $this->strEncoding); } /** * Returns number of syllables in a word * @param boolean|string $strText Text to be measured * @return int */ public function syllableCount($strText = false) { $strText = $this->setText($strText); return Syllables::syllableCount($strText, $this->strEncoding); } /** * Returns total syllable count for text. * @param boolean|string $strText Text to be measured * @return int */ public function totalSyllables($strText = false) { $strText = $this->setText($strText); return Syllables::totalSyllables($strText, $this->strEncoding); } /** * Returns average syllables per word for text. * @param boolean|string $strText Text to be measured * @return int|float */ public function averageSyllablesPerWord($strText = false) { $strText = $this->setText($strText); return Syllables::averageSyllablesPerWord($strText, $this->strEncoding); } /** * Returns the number of words with more than three syllables * @param boolean|string $strText Text to be measured * @param bool $blnCountProperNouns Boolean - should proper nouns be included in words count * @return int */ public function wordsWithThreeSyllables($strText = false, $blnCountProperNouns = true) { $strText = $this->setText($strText); return Syllables::wordsWithThreeSyllables($strText, $blnCountProperNouns, $this->strEncoding); } /** * Returns the percentage of words with more than three syllables * @param boolean|string $strText Text to be measured * @param bool $blnCountProperNouns Boolean - should proper nouns be included in words count * @return int|float */ public function percentageWordsWithThreeSyllables($strText = false, $blnCountProperNouns = true) { $strText = $this->setText($strText); return Syllables::percentageWordsWithThreeSyllables($strText, $blnCountProperNouns, $this->strEncoding); } /** * We switched to camel-case but we'll leave these aliases in for * convenience for anyone switching from the previous version. */ public function flesch_kincaid_reading_ease($strText = false) { return $this->fleschKincaidReadingEase($strText); } public function flesch_kincaid_grade_level($strText = false) { return $this->fleschKincaidGradeLevel($strText); } public function gunning_fog_score($strText = false) { return $this->gunningFogScore($strText); } public function coleman_liau_index($strText = false) { return $this->colemanLiauIndex($strText); } public function smog_index($strText = false) { return $this->smogIndex($strText); } public function automated_readability_index($strText = false) { return $this->automatedReadabilityIndex($strText); } public function dale_chall_readability_score($strText = false) { return $this->daleChallReadabilityScore($strText); } public function spache_readability_score($strText = false) { return $this->spacheReadabilityScore($strText); } } ================================================ FILE: vendor/davechild/textstatistics/src/DaveChild/TextStatistics/resources/DaleChallWordList.php ================================================ TextStatistics = new DaveChild\TextStatistics\TextStatistics(); $this->TextStatistics->normalise = false; } public function tearDown() { unset($this->objTextStatistics); } /* Test Syllables -------------------- */ public function testSyllableCountFailingCMUWords() { $this->assertEquals(4, $this->TextStatistics->syllableCount("abalone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("abare")); $this->assertEquals(3, $this->TextStatistics->syllableCount("abatement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("abatements")); $this->assertEquals(5, $this->TextStatistics->syllableCount("abbatiello")); $this->assertEquals(4, $this->TextStatistics->syllableCount("abbruzzese")); $this->assertEquals(2, $this->TextStatistics->syllableCount("abed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("abeyance")); $this->assertEquals(5, $this->TextStatistics->syllableCount("aborigine")); $this->assertEquals(5, $this->TextStatistics->syllableCount("aborigines")); $this->assertEquals(3, $this->TextStatistics->syllableCount("abounded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aboveboard")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aboveground")); $this->assertEquals(2, $this->TextStatistics->syllableCount("abridged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("abruzzese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("absences")); $this->assertEquals(4, $this->TextStatistics->syllableCount("absoluteness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("absolve")); $this->assertEquals(2, $this->TextStatistics->syllableCount("absolves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("abuses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("acacia")); $this->assertEquals(6, $this->TextStatistics->syllableCount("academically")); $this->assertEquals(5, $this->TextStatistics->syllableCount("academician")); $this->assertEquals(5, $this->TextStatistics->syllableCount("academicians")); $this->assertEquals(3, $this->TextStatistics->syllableCount("acceding")); $this->assertEquals(4, $this->TextStatistics->syllableCount("acceptances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("accion")); $this->assertEquals(5, $this->TextStatistics->syllableCount("accompaniment")); $this->assertEquals(5, $this->TextStatistics->syllableCount("accompaniments")); $this->assertEquals(3, $this->TextStatistics->syllableCount("accomplice")); $this->assertEquals(4, $this->TextStatistics->syllableCount("accomplices")); $this->assertEquals(3, $this->TextStatistics->syllableCount("accorded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("accordion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("accuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("aces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("achievement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("achievements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("achoa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("acknowledged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("acknowledgement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("acknowledges")); $this->assertEquals(5, $this->TextStatistics->syllableCount("acoustically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("acquaint")); $this->assertEquals(3, $this->TextStatistics->syllableCount("acquaintance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("acquainted")); $this->assertEquals(3, $this->TextStatistics->syllableCount("acquiesced")); $this->assertEquals(2, $this->TextStatistics->syllableCount("acquire")); $this->assertEquals(2, $this->TextStatistics->syllableCount("acquired")); $this->assertEquals(3, $this->TextStatistics->syllableCount("acquirer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("acquirers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("acquires")); $this->assertEquals(3, $this->TextStatistics->syllableCount("acreage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("acuteness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("adabelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("adage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("adame")); $this->assertEquals(2, $this->TextStatistics->syllableCount("added")); $this->assertEquals(3, $this->TextStatistics->syllableCount("addeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("addled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("adelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("adieu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("adjudged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("admired")); $this->assertEquals(4, $this->TextStatistics->syllableCount("adorabelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("advanced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("advancement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("advancements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("advances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("advantage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("advantaged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("advantageous")); $this->assertEquals(4, $this->TextStatistics->syllableCount("advantages")); $this->assertEquals(4, $this->TextStatistics->syllableCount("adventuresome")); $this->assertEquals(4, $this->TextStatistics->syllableCount("advertisement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("advertisements")); $this->assertEquals(4, $this->TextStatistics->syllableCount("advertises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("advice")); $this->assertEquals(4, $this->TextStatistics->syllableCount("advisedly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("advisement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("advises")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aegean")); $this->assertEquals(5, $this->TextStatistics->syllableCount("aerobically")); $this->assertEquals(7, $this->TextStatistics->syllableCount("aerodynamically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aerospace")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aerospatiale")); $this->assertEquals(5, $this->TextStatistics->syllableCount("aesthetically")); $this->assertEquals(5, $this->TextStatistics->syllableCount("afanasyev")); $this->assertEquals(3, $this->TextStatistics->syllableCount("affixes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("affluence")); $this->assertEquals(3, $this->TextStatistics->syllableCount("affluent")); $this->assertEquals(3, $this->TextStatistics->syllableCount("afforded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aforementioned")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aforesaid")); $this->assertEquals(4, $this->TextStatistics->syllableCount("afterimage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aftertaste")); $this->assertEquals(1, $this->TextStatistics->syllableCount("aged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ageless")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ages")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aggrandizement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aggressiveness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("agius")); $this->assertEquals(1, $this->TextStatistics->syllableCount("agne")); $this->assertEquals(4, $this->TextStatistics->syllableCount("agonizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("agreement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("agribusiness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aguayo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("aherne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aiguebelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("airborne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aircoa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("airspace")); $this->assertEquals(1, $this->TextStatistics->syllableCount("aisle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("aisles")); $this->assertEquals(4, $this->TextStatistics->syllableCount("akiyama")); $this->assertEquals(3, $this->TextStatistics->syllableCount("alarice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("albertville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("albion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("alcoa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("aldred")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aleo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("algeo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("algorithm")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aliases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("alicia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("allderdice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("allege")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alleged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("alleges")); $this->assertEquals(5, $this->TextStatistics->syllableCount("allegiances")); $this->assertEquals(1, $this->TextStatistics->syllableCount("alles")); $this->assertEquals(4, $this->TextStatistics->syllableCount("alliances")); $this->assertEquals(4, $this->TextStatistics->syllableCount("allowances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("allspice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("allwaste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alsace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("altarpiece")); $this->assertEquals(2, $this->TextStatistics->syllableCount("altice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("alusuisse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("alveolar")); $this->assertEquals(4, $this->TextStatistics->syllableCount("alveoli")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alyce")); $this->assertEquals(3, $this->TextStatistics->syllableCount("alyea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("alyeska")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amabelle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("amadea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("amadeo")); $this->assertEquals(5, $this->TextStatistics->syllableCount("amaryllises")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amaya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amazement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amazes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ambled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ambrosial")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ambrosian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ambulances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amended")); $this->assertEquals(4, $this->TextStatistics->syllableCount("amezcua")); $this->assertEquals(4, $this->TextStatistics->syllableCount("amityville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amorette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amperage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amusement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amusements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amuses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("analyses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("analyzes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anaya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anchorage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("andalusian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("andreoli")); $this->assertEquals(4, $this->TextStatistics->syllableCount("andreoni")); $this->assertEquals(4, $this->TextStatistics->syllableCount("andreotti")); $this->assertEquals(4, $this->TextStatistics->syllableCount("andreozzi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("anette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("angelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("angerer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("angering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("angled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anisette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("annabelle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("anne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("annette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("annexes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("announced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("announcement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("announcements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("announces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("annoyance")); $this->assertEquals(4, $this->TextStatistics->syllableCount("annoyances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("anstice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("antaya")); $this->assertEquals(5, $this->TextStatistics->syllableCount("antiabortion")); $this->assertEquals(5, $this->TextStatistics->syllableCount("antiapartheid")); $this->assertEquals(3, $this->TextStatistics->syllableCount("antoinette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anyplace")); $this->assertEquals(4, $this->TextStatistics->syllableCount("anzaldua")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aoyama")); $this->assertEquals(2, $this->TextStatistics->syllableCount("apace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("apiece")); $this->assertEquals(5, $this->TextStatistics->syllableCount("apologizes")); $this->assertEquals(5, $this->TextStatistics->syllableCount("apotheosis")); $this->assertEquals(5, $this->TextStatistics->syllableCount("apparatuses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("appearances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("appeasement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("appendage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("appendages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("appended")); $this->assertEquals(4, $this->TextStatistics->syllableCount("appendixes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("applesauce")); $this->assertEquals(3, $this->TextStatistics->syllableCount("appleyard")); $this->assertEquals(4, $this->TextStatistics->syllableCount("appliances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("appraises")); $this->assertEquals(4, $this->TextStatistics->syllableCount("apprehended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("apprentice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("apprenticed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("apprentices")); $this->assertEquals(4, $this->TextStatistics->syllableCount("apprenticeship")); $this->assertEquals(2, $this->TextStatistics->syllableCount("approached")); $this->assertEquals(5, $this->TextStatistics->syllableCount("appropriateness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("araya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("arbed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arbitrage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("arboreal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arceneaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arceo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("archambeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("archambeault")); $this->assertEquals(6, $this->TextStatistics->syllableCount("archeological")); $this->assertEquals(5, $this->TextStatistics->syllableCount("archeology")); $this->assertEquals(2, $this->TextStatistics->syllableCount("arches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ardelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("argonne")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ariella")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("arlette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("armistice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("armitage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("arne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("arnelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("arnette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arouses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("arranged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arrangement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arrangements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arranges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arrearage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("arrearages")); $this->assertEquals(4, $this->TextStatistics->syllableCount("arreola")); $this->assertEquals(5, $this->TextStatistics->syllableCount("arriortua")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arroyo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arseneau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arseneault")); $this->assertEquals(3, $this->TextStatistics->syllableCount("artifice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aryan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ascended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("asiain")); $this->assertEquals(2, $this->TextStatistics->syllableCount("asian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("asians")); $this->assertEquals(3, $this->TextStatistics->syllableCount("asiaweek")); $this->assertEquals(3, $this->TextStatistics->syllableCount("assemblage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("assembled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("assertiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("assurances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("astounded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("astuteness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("atalaya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("atlases")); $this->assertEquals(3, $this->TextStatistics->syllableCount("atonement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("attached")); $this->assertEquals(3, $this->TextStatistics->syllableCount("attended")); $this->assertEquals(4, $this->TextStatistics->syllableCount("attentiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("attractiveness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("audette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("audiences")); $this->assertEquals(2, $this->TextStatistics->syllableCount("auguste")); $this->assertEquals(3, $this->TextStatistics->syllableCount("auspices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("authement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("authorizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("auyeung")); $this->assertEquals(2, $this->TextStatistics->syllableCount("auzenne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("avarice")); $this->assertEquals(4, $this->TextStatistics->syllableCount("avedisian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("avenged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("average")); $this->assertEquals(3, $this->TextStatistics->syllableCount("averette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("avice")); $this->assertEquals(4, $this->TextStatistics->syllableCount("avowedly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("awarded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("awareness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("AWOL")); $this->assertEquals(2, $this->TextStatistics->syllableCount("axes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ayacucho")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ayala")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ayars")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ayatollah")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ayatollahs")); $this->assertEquals(4, $this->TextStatistics->syllableCount("Ayatullah")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ayerst")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ayo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ayon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ayoub")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ayuso")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ayyad")); $this->assertEquals(4, $this->TextStatistics->syllableCount("azpurua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("babbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("babette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("babineau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("babineaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("babyak")); $this->assertEquals(3, $this->TextStatistics->syllableCount("backhanded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("backstage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("badeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("badeaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("badgering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("badges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baffled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baggage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baidoa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("balanced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("balances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("balboa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baldrige")); $this->assertEquals(1, $this->TextStatistics->syllableCount("balle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("balles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("balliet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("balyeat")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bandage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bandaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bandages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("banded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("banville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baptiste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barbeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barbette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barcia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baribeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barlage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("barnes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barnette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barrage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barraged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("barrages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barrette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("barrilleaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("barrineau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bartlesville")); $this->assertEquals(5, $this->TextStatistics->syllableCount("bartolomeo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("basaldua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("basement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("basements")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bases")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baskerville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baskette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("basque")); $this->assertEquals(1, $this->TextStatistics->syllableCount("basques")); $this->assertEquals(1, $this->TextStatistics->syllableCount("basse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bassette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bastille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bastogne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("batches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("batesville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bathe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bathed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bathes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("battelle")); $this->assertEquals(5, $this->TextStatistics->syllableCount("batticaloa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bayard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bayog")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bayonet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bayonets")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bayou")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bayous")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bayuk")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bayus")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bearded")); $this->assertEquals(1, $this->TextStatistics->syllableCount("beau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaubien")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beauchaine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beauchamp")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beauchemin")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beauchene")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaudet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaudette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaudin")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaudoin")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaudreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaudry")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beauford")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaufort")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaufrere")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beaujolais")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaulac")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beaumier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaumont")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaupre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beauregard")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beausoleil")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beautician")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beauties")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beautiful")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beautify")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beauty")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beauvais")); $this->assertEquals(1, $this->TextStatistics->syllableCount("beaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bebeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("becherer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bedoya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bedraggled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bedrosian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Beetlejuice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("befriended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("befuddled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beidaihe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beiges")); $this->assertEquals(1, $this->TextStatistics->syllableCount("beirne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("belge")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beliveau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("belle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("belleau")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bellefeuille")); $this->assertEquals(1, $this->TextStatistics->syllableCount("belles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("belleville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("belliveau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bellville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bellyache")); $this->assertEquals(2, $this->TextStatistics->syllableCount("belonged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beltsville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("belville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("belyea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("belyeu")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bemusement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bended")); $this->assertEquals(1, $this->TextStatistics->syllableCount("benne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bennette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bentonville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beowulf")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bereavement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("berges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("berjaya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bernadette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("berne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("berneice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bernice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beseiged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("besiege")); $this->assertEquals(2, $this->TextStatistics->syllableCount("besieged")); $this->assertEquals(1, $this->TextStatistics->syllableCount("beske")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bespectacled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("besse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bessette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("beste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bethpage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("betrayal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("betrayals")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beverage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beyond")); $this->assertEquals(3, $this->TextStatistics->syllableCount("biases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bibeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bibeault")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bicycled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bierbusse")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bille")); $this->assertEquals(1, $this->TextStatistics->syllableCount("billes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bilodeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bilyeu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("binette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("binges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("biondi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("biondo")); $this->assertEquals(5, $this->TextStatistics->syllableCount("biondolillo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bionetics")); $this->assertEquals(2, $this->TextStatistics->syllableCount("birthplace")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bisque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bissette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bissonette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bissonnette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bistodeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bivalve")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bivalves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blanchette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("blaske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blazes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bleau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blended")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blinded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("blindfolded")); $this->assertEquals(1, $this->TextStatistics->syllableCount("blithe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blithely")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blockage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("blockages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blouses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("blythe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boarded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("boardinghouses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bobbette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bobsled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boccia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bocian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boggled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("boghosian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bogosian")); $this->assertEquals(5, $this->TextStatistics->syllableCount("boguslavskaya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boileau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boisseau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("boissonneault")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boldface")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bolle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bolles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bombarded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bondage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bonded")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bonne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bonneau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bonnes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bonnette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bonnibelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bonuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bonville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bookcases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bookshelves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("boomeranged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boonville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("boothe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bordeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bordeaux")); $this->assertEquals(4, $this->TextStatistics->syllableCount("borealis")); $this->assertEquals(2, $this->TextStatistics->syllableCount("borges")); $this->assertEquals(1, $this->TextStatistics->syllableCount("borne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("borneo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("borosage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boscia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bosse")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bothe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boudreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boudreaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bougainville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boulette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bounces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bounded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bourbeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bourdeau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bourne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bournonville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boutelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boxes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boyack")); $this->assertEquals(4, $this->TextStatistics->syllableCount("boyajian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boyan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boyar")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boyett")); $this->assertEquals(3, $this->TextStatistics->syllableCount("boyington")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boyish")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boyum")); $this->assertEquals(2, $this->TextStatistics->syllableCount("braces")); $this->assertEquals(1, $this->TextStatistics->syllableCount("braille")); $this->assertEquals(1, $this->TextStatistics->syllableCount("brailles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bralorne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bramlage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bramlette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brancheau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("branded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brasseaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brazeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brazzaville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("breakage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("breathe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("breathed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("breathes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("breau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("breault")); $this->assertEquals(1, $this->TextStatistics->syllableCount("breaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("breezes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("breon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brescia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bresette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bresse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bressette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brideau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridgeport")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("briefcases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brion")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brissette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("britches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brokerage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("brokerages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brokering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brooksville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brosseau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brossette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brousseau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brownsville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bruegge")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bruges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bruises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brundage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brundige")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bruneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brunelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brunette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bruske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("brusque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brusquely")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brusseau")); $this->assertEquals(4, $this->TextStatistics->syllableCount("brutalizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brutsche")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bryan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bryans")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bryant")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bryars")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brydges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bryen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bubbled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Bubiyan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buckled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("budreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bulges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bundled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bungled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("buoyancy")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buoyant")); $this->assertEquals(2, $this->TextStatistics->syllableCount("burbage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("burchette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("burdette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bureau")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bureaucracies")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bureaucracy")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bureaucrat")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bureaucratic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bureaucrats")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bureaus")); $this->assertEquals(2, $this->TextStatistics->syllableCount("burlesque")); $this->assertEquals(1, $this->TextStatistics->syllableCount("burne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("burnes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("burnette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("burrage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("business")); $this->assertEquals(3, $this->TextStatistics->syllableCount("businesses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("buske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("busse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("butchering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buteau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("buttonville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buyout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buyouts")); $this->assertEquals(1, $this->TextStatistics->syllableCount("buysse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("byam")); $this->assertEquals(2, $this->TextStatistics->syllableCount("byars")); $this->assertEquals(2, $this->TextStatistics->syllableCount("byas")); $this->assertEquals(3, $this->TextStatistics->syllableCount("byassee")); $this->assertEquals(3, $this->TextStatistics->syllableCount("byerley")); $this->assertEquals(1, $this->TextStatistics->syllableCount("byrne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("byrnes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cabbage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cabbages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cabled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cableone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cabooses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cabotage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cacace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("caccia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cadences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cadorette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cafe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cafes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cages")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cairnes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("caisse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("calif")); $this->assertEquals(5, $this->TextStatistics->syllableCount("california")); $this->assertEquals(5, $this->TextStatistics->syllableCount("californian")); $this->assertEquals(5, $this->TextStatistics->syllableCount("californians")); $this->assertEquals(1, $this->TextStatistics->syllableCount("calle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("calles")); $this->assertEquals(1, $this->TextStatistics->syllableCount("calves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cambridgeport")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cambridgeside")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cameo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cameos")); $this->assertEquals(3, $this->TextStatistics->syllableCount("camerer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("camille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("camouflage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("camouflaged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("campeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("campion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("campuses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("canadienne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("candace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("candice")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cannes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cantrelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("canvases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("capece")); $this->assertEquals(2, $this->TextStatistics->syllableCount("capelle")); $this->assertEquals(5, $this->TextStatistics->syllableCount("capitalizes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cappiello")); $this->assertEquals(2, $this->TextStatistics->syllableCount("caprice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("capua")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caravelle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("caraveo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carbonneau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carcione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("carded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cardiges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("caresse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cariello")); $this->assertEquals(2, $this->TextStatistics->syllableCount("carlisle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("carnage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("carne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("carnes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carreon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carrion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carriveau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cartaya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cartersville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("carthage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cartilage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cartrette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cartridges")); $this->assertEquals(5, $this->TextStatistics->syllableCount("cartusciello")); $this->assertEquals(1, $this->TextStatistics->syllableCount("carves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("carville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cassette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cassettes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("caste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("castille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cataloged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cataloguing")); $this->assertEquals(2, $this->TextStatistics->syllableCount("catches")); $this->assertEquals(5, $this->TextStatistics->syllableCount("categorizes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cattaneo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caucasian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caucuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("causes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cawthorne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("caya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cayuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ceases")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ceausescu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ceder")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ceding")); $this->assertEquals(3, $this->TextStatistics->syllableCount("celaya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("celeste")); $this->assertEquals(3, $this->TextStatistics->syllableCount("censuses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("centerpiece")); $this->assertEquals(3, $this->TextStatistics->syllableCount("centrifuge")); $this->assertEquals(4, $this->TextStatistics->syllableCount("centrifuges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ceraceous")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cereal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cereals")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cezanne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chadbourne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("challenged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("challenges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chalmette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("chameleon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("champagne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("champagnes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("champeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("champion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("championed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("championing")); $this->assertEquals(3, $this->TextStatistics->syllableCount("champions")); $this->assertEquals(4, $this->TextStatistics->syllableCount("championship")); $this->assertEquals(4, $this->TextStatistics->syllableCount("championships")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("changes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chapelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chappelle")); $this->assertEquals(5, $this->TextStatistics->syllableCount("characterizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("charasse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("charboneau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("charbonneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("charette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("charges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("charlemagne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("charmion")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chasm")); $this->assertEquals(1, $this->TextStatistics->syllableCount("chasse")); $this->assertEquals(1, $this->TextStatistics->syllableCount("chaste")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chastises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chateau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chateaux")); $this->assertEquals(1, $this->TextStatistics->syllableCount("chausse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chechnya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chechnyan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cheeses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chelette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chenette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cheong")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chequing")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cherne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chevette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chevrette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chiyoda")); $this->assertEquals(2, $this->TextStatistics->syllableCount("choices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chooses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("choreograph")); $this->assertEquals(4, $this->TextStatistics->syllableCount("choreographed")); $this->assertEquals(5, $this->TextStatistics->syllableCount("choreographer")); $this->assertEquals(5, $this->TextStatistics->syllableCount("choreographers")); $this->assertEquals(5, $this->TextStatistics->syllableCount("choreographic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("choreography")); $this->assertEquals(3, $this->TextStatistics->syllableCount("choruses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("christabelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chronicled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chuckled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("chujitsuya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("churches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cigarette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cigarettes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cilicia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("circled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("circumstances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("circuses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ciriello")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cirincione")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cirrincione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cistercian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cityplace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("claiborne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("clairvoyance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("clarabelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clarette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clarice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clarisse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clarksville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clarrisse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("claudette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clauses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clavette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clayborne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("claybourne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clayey")); $this->assertEquals(3, $this->TextStatistics->syllableCount("clearances")); $this->assertEquals(4, $this->TextStatistics->syllableCount("clearinghouses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cleavage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cleo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cleopatra")); $this->assertEquals(3, $this->TextStatistics->syllableCount("climaxes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("clinician")); $this->assertEquals(3, $this->TextStatistics->syllableCount("clinicians")); $this->assertEquals(4, $this->TextStatistics->syllableCount("clodoveo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("closeness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("closes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("clothe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("clothed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("clothes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("clubhouses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clutches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clyatt")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coalesced")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coatesville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cobbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coccia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coddled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coercion")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cohesiveness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coinage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cointreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("collage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("collages")); $this->assertEquals(1, $this->TextStatistics->syllableCount("colle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("college")); $this->assertEquals(3, $this->TextStatistics->syllableCount("colleges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("collegeville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("collette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colleville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cologne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("comanche")); $this->assertEquals(4, $this->TextStatistics->syllableCount("combativeness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("comeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("comeaux")); $this->assertEquals(4, $this->TextStatistics->syllableCount("comedienne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("commanded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("commenced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("commencement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("commences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("commended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("commingled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("commonplace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("compeau")); $this->assertEquals(5, $this->TextStatistics->syllableCount("competitiveness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("completeness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("complexes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("composes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("compounded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("comprehended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("comprises")); $this->assertEquals(4, $this->TextStatistics->syllableCount("compromises")); $this->assertEquals(3, $this->TextStatistics->syllableCount("conceding")); $this->assertEquals(4, $this->TextStatistics->syllableCount("concepcion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("concierge")); $this->assertEquals(4, $this->TextStatistics->syllableCount("concubinage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("condolences")); $this->assertEquals(4, $this->TextStatistics->syllableCount("conferences")); $this->assertEquals(4, $this->TextStatistics->syllableCount("confidences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("confinement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("confluence")); $this->assertEquals(3, $this->TextStatistics->syllableCount("confounded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("confucian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("confuses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("congruence")); $this->assertEquals(2, $this->TextStatistics->syllableCount("connely")); $this->assertEquals(3, $this->TextStatistics->syllableCount("consciences")); $this->assertEquals(5, $this->TextStatistics->syllableCount("constituencies")); $this->assertEquals(5, $this->TextStatistics->syllableCount("constituency")); $this->assertEquals(4, $this->TextStatistics->syllableCount("constituent")); $this->assertEquals(4, $this->TextStatistics->syllableCount("constituents")); $this->assertEquals(3, $this->TextStatistics->syllableCount("contended")); $this->assertEquals(5, $this->TextStatistics->syllableCount("continuances")); $this->assertEquals(4, $this->TextStatistics->syllableCount("contrivances")); $this->assertEquals(4, $this->TextStatistics->syllableCount("controversial")); $this->assertEquals(4, $this->TextStatistics->syllableCount("conveniences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("conveyance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("conveyor")); $this->assertEquals(2, $this->TextStatistics->syllableCount("conville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("convinced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("convinces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cooperage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coppage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("corabelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("corded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("corette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("corinne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("corne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cornelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cornette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("corresponded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("corriveau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("corsage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("corvette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("corvettes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coscia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cosette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cossette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("coste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cotelle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cotroneo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cottage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cottages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("countenanced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("countenances")); $this->assertEquals(4, $this->TextStatistics->syllableCount("counterbalanced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("countercharges")); $this->assertEquals(6, $this->TextStatistics->syllableCount("counterespionage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coupled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("courage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("courageous")); $this->assertEquals(4, $this->TextStatistics->syllableCount("courageously")); $this->assertEquals(2, $this->TextStatistics->syllableCount("courteau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("courthouses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("courville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cousineau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coverage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coverages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("covering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coverings")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coviello")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cowardice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cowering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crackled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crawfordsville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crayon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crayons")); $this->assertEquals(2, $this->TextStatistics->syllableCount("creole")); $this->assertEquals(2, $this->TextStatistics->syllableCount("creoles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("creolized")); $this->assertEquals(3, $this->TextStatistics->syllableCount("creosote")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crepeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crevice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crevices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cribbage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cringes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crippled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("criscione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crises")); $this->assertEquals(4, $this->TextStatistics->syllableCount("criticizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crocuses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("crosse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crosspiece")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crosspieces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("croteau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crotonville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crotteau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crowded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cruces")); $this->assertEquals(4, $this->TextStatistics->syllableCount("crucifixes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cruises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crumbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crumpled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crutches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cryan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cubbage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cuccia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cuddled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cuddling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cuneo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("curtice")); $this->assertEquals(1, $this->TextStatistics->syllableCount("curves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cuteness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cuyahoga")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cyacq")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cyanamid")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cyanazine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cyanide")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cyanuric")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cyberspace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cycled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cytoplasm")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dabbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("daigneault")); $this->assertEquals(3, $this->TextStatistics->syllableCount("daleo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("damage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("damaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("damages")); $this->assertEquals(1, $this->TextStatistics->syllableCount("damme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dandeneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("danelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dangled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("daniello")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dansereau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("danville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dapice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("darbonne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("darice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("darrelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("darville")); $this->assertEquals(4, $this->TextStatistics->syllableCount("databases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("daya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dayan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dazzled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deathbed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deatherage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("debasement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("debrosse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("decapua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("decelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("decelles")); $this->assertEquals(4, $this->TextStatistics->syllableCount("decisiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("decomposes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("decoteau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("decreases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dedeaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deduce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deduced")); $this->assertEquals(2, $this->TextStatistics->syllableCount("defaced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("defarges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("defelice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("defended")); $this->assertEquals(4, $this->TextStatistics->syllableCount("defensiveness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("defeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("degaulle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dehoyos")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dejarnette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("delage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("delbosque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deleo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deleon")); $this->assertEquals(5, $this->TextStatistics->syllableCount("deleonardis")); $this->assertEquals(2, $this->TextStatistics->syllableCount("delfosse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delgiudice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delguidice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delicia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("delisle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("deliverers")); $this->assertEquals(4, $this->TextStatistics->syllableCount("delivering")); $this->assertEquals(1, $this->TextStatistics->syllableCount("delle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("delmed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deluccia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delucia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deluge")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deluged")); $this->assertEquals(1, $this->TextStatistics->syllableCount("delve")); $this->assertEquals(1, $this->TextStatistics->syllableCount("delves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("demanded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dematteo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("demayo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("demeo")); $this->assertEquals(6, $this->TextStatistics->syllableCount("demilitarizes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("demme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deneault")); $this->assertEquals(2, $this->TextStatistics->syllableCount("denice")); $this->assertEquals(1, $this->TextStatistics->syllableCount("denne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("denomme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("denounced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("denounces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("deodorant")); $this->assertEquals(4, $this->TextStatistics->syllableCount("deodorants")); $this->assertEquals(5, $this->TextStatistics->syllableCount("deoliveira")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("depended")); $this->assertEquals(4, $this->TextStatistics->syllableCount("deployable")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deranged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("derousse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("descended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("descoteaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deserves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("desormeaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("despises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("desselle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("detached")); $this->assertEquals(6, $this->TextStatistics->syllableCount("deterioration")); $this->assertEquals(3, $this->TextStatistics->syllableCount("detherage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dettling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deveau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deveaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("develle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("devereaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("device")); $this->assertEquals(3, $this->TextStatistics->syllableCount("devices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("devises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deyo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deyoe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deyoung")); $this->assertEquals(4, $this->TextStatistics->syllableCount("diagnoses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dianthia")); $this->assertEquals(5, $this->TextStatistics->syllableCount("diaphonia")); $this->assertEquals(6, $this->TextStatistics->syllableCount("dibartolomeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dibbled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("diceon")); $this->assertEquals(7, $this->TextStatistics->syllableCount("dideoxycytidine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dieringer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dieses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("diet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dieters")); $this->assertEquals(3, $this->TextStatistics->syllableCount("difelice")); $this->assertEquals(4, $this->TextStatistics->syllableCount("differences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("diffuses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dileo")); $this->assertEquals(5, $this->TextStatistics->syllableCount("dileonardo")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dille")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dimatteo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dimeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dimpled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dinges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("diona")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dione")); $this->assertEquals(5, $this->TextStatistics->syllableCount("dionysius")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disabled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disadvantage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disadvantaged")); $this->assertEquals(5, $this->TextStatistics->syllableCount("disadvantageous")); $this->assertEquals(5, $this->TextStatistics->syllableCount("disadvantages")); $this->assertEquals(5, $this->TextStatistics->syllableCount("disallowances")); $this->assertEquals(5, $this->TextStatistics->syllableCount("disappearances")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disassembled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disbanded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disbursement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disbursements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("discarded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("discharges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("discloses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("discourage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("discouraged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("discouragement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("discourages")); $this->assertEquals(4, $this->TextStatistics->syllableCount("discovering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("diseases")); $this->assertEquals(5, $this->TextStatistics->syllableCount("disenfranchisement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disengage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disengaged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disengagement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("disgrace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("disgraced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disgraceful")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disguises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("diskette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("diskettes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dislodged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disloyal")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disloyalty")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disparage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disparaged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disparages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dispatches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("displace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("displaced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("displacement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("displacements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("displaces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disposes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disregarded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disservice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dissolve")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dissolves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("distanced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("distances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("distaste")); $this->assertEquals(3, $this->TextStatistics->syllableCount("distasteful")); $this->assertEquals(3, $this->TextStatistics->syllableCount("distended")); $this->assertEquals(4, $this->TextStatistics->syllableCount("distinctiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disturbances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ditches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("divergences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("diverges")); $this->assertEquals(4, $this->TextStatistics->syllableCount("divisiveness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("divorced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("divorces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dodges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("doenges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("doggedly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dolce")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dolle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("donne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("doralynne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("doraville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dorette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dorice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dOrsay")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dosage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dosages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("doses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("doubled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("doucette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("douville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("downstage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("doyal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("doyel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("doyen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("doyon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("drainage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dralle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dramatizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("drapeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dredges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dressage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dribbled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("droste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dubeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duchenne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("duchesneau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dudayev")); $this->assertEquals(3, $this->TextStatistics->syllableCount("duena")); $this->assertEquals(3, $this->TextStatistics->syllableCount("duenas")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dukakises")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dulcibelle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dulle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dumbfounded")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dunne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("durette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("duryea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dusseau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dusseault")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dwelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dwindled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dyad")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dyal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dyana")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dyane")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dyansen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dyar")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dyas")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dyatron")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dyazide")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dyess")); $this->assertEquals(2, $this->TextStatistics->syllableCount("easement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eases")); $this->assertEquals(1, $this->TextStatistics->syllableCount("eastes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("eau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("eaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("edges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("edifice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("edithe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("edythe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("effectiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("efficiences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("effluent")); $this->assertEquals(3, $this->TextStatistics->syllableCount("egerer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Ehud")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eldred")); $this->assertEquals(4, $this->TextStatistics->syllableCount("electrician")); $this->assertEquals(4, $this->TextStatistics->syllableCount("electricians")); $this->assertEquals(4, $this->TextStatistics->syllableCount("electrospace")); $this->assertEquals(1, $this->TextStatistics->syllableCount("elle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ellesse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ellette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ellice")); $this->assertEquals(4, $this->TextStatistics->syllableCount("elusiveness")); $this->assertEquals(1, $this->TextStatistics->syllableCount("elves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("embed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("embedded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("embezzled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("embrace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("embraced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("embraces")); $this->assertEquals(5, $this->TextStatistics->syllableCount("embryology")); $this->assertEquals(3, $this->TextStatistics->syllableCount("emerges")); $this->assertEquals(4, $this->TextStatistics->syllableCount("emeryville")); $this->assertEquals(4, $this->TextStatistics->syllableCount("eminences")); $this->assertEquals(2, $this->TextStatistics->syllableCount("emlynne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("emme")); $this->assertEquals(3, $this->TextStatistics->syllableCount("emphases")); $this->assertEquals(4, $this->TextStatistics->syllableCount("emphasizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("emplacement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("employable")); $this->assertEquals(3, $this->TextStatistics->syllableCount("employee")); $this->assertEquals(3, $this->TextStatistics->syllableCount("employees")); $this->assertEquals(4, $this->TextStatistics->syllableCount("empowering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enabled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("encircled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("encourage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("encouraged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("encouragement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("encourages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("encroached")); $this->assertEquals(4, $this->TextStatistics->syllableCount("endangering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("endorsement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("endorsements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enfeebled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("enforced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enforcement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enforces")); $this->assertEquals(4, $this->TextStatistics->syllableCount("enfranchises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("engage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("engaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("engagement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("engagements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("engages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("enhanced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enhancement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enhancements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enhances")); $this->assertEquals(4, $this->TextStatistics->syllableCount("enjoyable")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enlarges")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ennes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("enrage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("enraged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("enriched")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ensconced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enslavement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("entangled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("enterprises")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enthuses")); $this->assertEquals(6, $this->TextStatistics->syllableCount("enthusiastically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("entice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("enticed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enticement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enticements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("entourage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("entranced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("entrances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("entrenched")); $this->assertEquals(3, $this->TextStatistics->syllableCount("envisage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("envisaged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("envisages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eocene")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eoff")); $this->assertEquals(4, $this->TextStatistics->syllableCount("eohippus")); $this->assertEquals(4, $this->TextStatistics->syllableCount("eolande")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eons")); $this->assertEquals(5, $this->TextStatistics->syllableCount("epitomizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("erases")); $this->assertEquals(1, $this->TextStatistics->syllableCount("erne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("escapement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("espionage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("espouses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("essayist")); $this->assertEquals(1, $this->TextStatistics->syllableCount("esse")); $this->assertEquals(1, $this->TextStatistics->syllableCount("este")); $this->assertEquals(2, $this->TextStatistics->syllableCount("estelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("estranged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("estrangement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("etches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ethereal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ettlinger")); $this->assertEquals(4, $this->TextStatistics->syllableCount("etzioni")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eudocia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eunice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eurasian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("europeenne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("euroyen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eustace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eustacia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eustice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("evansville")); $this->assertEquals(4, $this->TextStatistics->syllableCount("evenhanded")); $this->assertEquals(5, $this->TextStatistics->syllableCount("evenhandedly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("everage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("everette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("evidenced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("evidences")); $this->assertEquals(2, $this->TextStatistics->syllableCount("evinced")); $this->assertEquals(2, $this->TextStatistics->syllableCount("evolve")); $this->assertEquals(2, $this->TextStatistics->syllableCount("evolves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("evonne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("exchanged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("exchanges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("excises")); $this->assertEquals(3, $this->TextStatistics->syllableCount("excitement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("excoa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("excuses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("exercises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("exes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("expanded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("expended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("exposes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("expounded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("expunged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("extended")); $this->assertEquals(5, $this->TextStatistics->syllableCount("extraordinaire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eyerman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ezelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fabled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("faceless")); $this->assertEquals(2, $this->TextStatistics->syllableCount("faces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("facteau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("falardeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fangled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fantasizes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fariello")); $this->assertEquals(3, $this->TextStatistics->syllableCount("farmhouses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("farnes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("faucette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("favreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("faxes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fayard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fayez")); $this->assertEquals(3, $this->TextStatistics->syllableCount("faymonville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("feces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fecteau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fejes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("felice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("felicia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("felrice")); $this->assertEquals(1, $this->TextStatistics->syllableCount("femme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fences")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("feodor")); $this->assertEquals(4, $this->TextStatistics->syllableCount("feodora")); $this->assertEquals(3, $this->TextStatistics->syllableCount("feola")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fertilizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fetches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fettes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fetuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fiddled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fiddling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fielded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("figaroa")); $this->assertEquals(4, $this->TextStatistics->syllableCount("figueroa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("filice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("filyaw")); $this->assertEquals(2, $this->TextStatistics->syllableCount("financed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("financement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("finances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("finesse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fingering")); $this->assertEquals(1, $this->TextStatistics->syllableCount("finne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fiona")); $this->assertEquals(4, $this->TextStatistics->syllableCount("firehouses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fireplace")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fireplaces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fisette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fishburne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fiske")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fitzmaurice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fixes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fizzled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("flamboyance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("flamboyant")); $this->assertEquals(4, $this->TextStatistics->syllableCount("flamboyantly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("flanges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fleurette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("flexes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("flounces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("flowering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fluency")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fluent")); $this->assertEquals(1, $this->TextStatistics->syllableCount("flythe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("focuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("folded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("follette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fontenette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fonville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("foodservice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("footage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("footrace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("forage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("forces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fordyce")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forecloses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("foretaste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("forges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("forgette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forgione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forgiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("formalizes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fornes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("forsythe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forwarded")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fosse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("founded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("foxes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fradette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fragrances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("franchises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("francia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("francisville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frazzled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frechette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("freckled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("freezes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fregeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frenette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("freon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("freons")); $this->assertEquals(2, $this->TextStatistics->syllableCount("freya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("freyermuth")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fringes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("friona")); $this->assertEquals(2, $this->TextStatistics->syllableCount("friscia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("friske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fromme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frontage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fryar")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fuchsias")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fujiya")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fujiyama")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fukuyama")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fumbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("funded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("furches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("furloughed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("furnace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("furnaces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("furuya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fuselage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fuselages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fuzes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gabriella")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gabrielli")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gaccione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gainesville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("galarneau")); $this->assertEquals(4, $this->TextStatistics->syllableCount("galileo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("galipeau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("galle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("galleon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("galleons")); $this->assertEquals(1, $this->TextStatistics->syllableCount("galles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("galyean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("galyen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gamage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gambled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gamboa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gammage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ganglionic")); $this->assertEquals(2, $this->TextStatistics->syllableCount("garage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("garages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("garbage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("garbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("garceau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("garces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gardea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gareau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("garges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("garneau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("garnes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("garnette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("garrette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gases")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gasque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gastineau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gaudette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gaudreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gauges")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gaulle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gauthreaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gautreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gautreaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gauvreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gazelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gazelles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gazes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gazette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gearboxes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gedeon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("geers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gelette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gelineau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gelles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gemayel")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gemme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gendreau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("genoa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("geo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geocentric")); $this->assertEquals(5, $this->TextStatistics->syllableCount("geochemistry")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geodesic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geodesy")); $this->assertEquals(3, $this->TextStatistics->syllableCount("geodyne")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geoffrion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("geoffroy")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geographer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geographic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("geographical")); $this->assertEquals(6, $this->TextStatistics->syllableCount("geographically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geography")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geologic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("geological")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geologist")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geologists")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geology")); $this->assertEquals(5, $this->TextStatistics->syllableCount("geomagnetic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geometric")); $this->assertEquals(5, $this->TextStatistics->syllableCount("geometrical")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geometries")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geometry")); $this->assertEquals(6, $this->TextStatistics->syllableCount("geomorphology")); $this->assertEquals(2, $this->TextStatistics->syllableCount("geon")); $this->assertEquals(5, $this->TextStatistics->syllableCount("geophysical")); $this->assertEquals(6, $this->TextStatistics->syllableCount("geopolitical")); $this->assertEquals(5, $this->TextStatistics->syllableCount("geopolitics")); $this->assertEquals(3, $this->TextStatistics->syllableCount("geordie")); $this->assertEquals(2, $this->TextStatistics->syllableCount("georg")); $this->assertEquals(4, $this->TextStatistics->syllableCount("georgeson")); $this->assertEquals(3, $this->TextStatistics->syllableCount("georgi")); $this->assertEquals(4, $this->TextStatistics->syllableCount("georgiades")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geostrophic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geosyncline")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geotaxis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("geotek")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geothermal")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geotropic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("geotropism")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("geringer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("geske")); $this->assertEquals(3, $this->TextStatistics->syllableCount("geyelin")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gibeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gibeault")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gideon")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gieske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giggled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gildea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gilded")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gille")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gilles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gillette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gionet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giselle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giudice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glanville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glazes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glenville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glitches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("glowering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gobbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goddeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("godette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("goethe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("goldfeder")); $this->assertEquals(1, $this->TextStatistics->syllableCount("golle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goodreau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gooseberry")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gordeyev")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gorgeous")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gorges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gossage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gosse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goudeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goudreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goulette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goyim")); $this->assertEquals(2, $this->TextStatistics->syllableCount("graceful")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gracefully")); $this->assertEquals(2, $this->TextStatistics->syllableCount("graceless")); $this->assertEquals(2, $this->TextStatistics->syllableCount("graces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gracia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("graffeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grambling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("granges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("granville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grappled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grappling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grasse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gravelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gravette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grayish")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grecian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("greenhouses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("greenpeace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("greenville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("grenouille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("grievances")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grimaced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("grimaces")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grimme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grinage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grizzled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("groleau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grosse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grotesque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("grotesquely")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grothe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grotheer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grounded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("groupement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grouses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grudges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grumbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guarded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("guardedly")); $this->assertEquals(4, $this->TextStatistics->syllableCount("guayabera")); $this->assertEquals(3, $this->TextStatistics->syllableCount("guccione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guerette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guerrette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guidice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guilbeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guilbeault")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guilbeaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("guillemette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guillette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guilmette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gullette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("guste")); $this->assertEquals(3, $this->TextStatistics->syllableCount("guyana")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guyett")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guyon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guyot")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gvaryahu")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gwynne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("haberer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hachette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("haggled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("halcion")); $this->assertEquals(1, $this->TextStatistics->syllableCount("halle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("halve")); $this->assertEquals(1, $this->TextStatistics->syllableCount("halves")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hamme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hammes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("handed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("handedly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("handled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hannes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hansche")); $this->assertEquals(3, $this->TextStatistics->syllableCount("haranguing")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hardage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("harleysville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("harnage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("harne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("harriette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hartlage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hartshorne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("harville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("haske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hasse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hassled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("haste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hatches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hathorne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hauppauge")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hawthorne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hayashi")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hayashida")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hayek")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hayen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hayenga")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hearne")); $this->assertEquals(4, $this->TextStatistics->syllableCount("heavyhanded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heberer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heckled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hedges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heidbreder")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heiges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("helice")); $this->assertEquals(1, $this->TextStatistics->syllableCount("helle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hemme")); $this->assertEquals(5, $this->TextStatistics->syllableCount("hemocyanin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hemorrhage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hemorrhaged")); $this->assertEquals(1, $this->TextStatistics->syllableCount("henne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("henneberry")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hennes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("henriette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hentges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("henthorne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heralded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("herbaceous")); $this->assertEquals(2, $this->TextStatistics->syllableCount("herded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heritage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hermitage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("herne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("herriage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("herrlinger")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hesse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hessian")); $this->assertEquals(5, $this->TextStatistics->syllableCount("heterogeneous")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hicksville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hideo")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hille")); $this->assertEquals(4, $this->TextStatistics->syllableCount("himalayan")); $this->assertEquals(4, $this->TextStatistics->syllableCount("himalayas")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hindrances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hinges")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hirayama")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hiroyuki")); $this->assertEquals(4, $this->TextStatistics->syllableCount("histrionic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("histrionics")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hitches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoarded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoarseness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoaxes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hobbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hodges")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hoelle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("holle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homage")); $this->assertEquals(5, $this->TextStatistics->syllableCount("homeostasis")); $this->assertEquals(5, $this->TextStatistics->syllableCount("homeostatic")); $this->assertEquals(1, $this->TextStatistics->syllableCount("homme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hommes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horace")); $this->assertEquals(1, $this->TextStatistics->syllableCount("horne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hospice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hospices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hostage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hostages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("houdaille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hounded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("houses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hovering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoyos")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huddled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hugely")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hugette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hughette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hulette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("humbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hundred")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hungering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huntsville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hurteau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hutcheon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huyett")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hyacinth")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hyacintha")); $this->assertEquals(5, $this->TextStatistics->syllableCount("hyacinthia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hyacinthie")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hyacinths")); $this->assertEquals(5, $this->TextStatistics->syllableCount("hyaluronic")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hyams")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hyannis")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hyatt")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hyena")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hyenas")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hyperion")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hypotheses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hyraxes")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ianniello")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ices")); $this->assertEquals(5, $this->TextStatistics->syllableCount("iconoclasm")); $this->assertEquals(3, $this->TextStatistics->syllableCount("idea")); $this->assertEquals(6, $this->TextStatistics->syllableCount("ideological")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ideologies")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ideologists")); $this->assertEquals(2, $this->TextStatistics->syllableCount("idette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("idled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("idolizes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ierne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ignace")); $this->assertEquals(1, $this->TextStatistics->syllableCount("illes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Ilyich")); $this->assertEquals(2, $this->TextStatistics->syllableCount("image")); $this->assertEquals(3, $this->TextStatistics->syllableCount("images")); $this->assertEquals(4, $this->TextStatistics->syllableCount("imbalances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("imbedded")); $this->assertEquals(5, $this->TextStatistics->syllableCount("immortalizes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("immunizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("impasse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("impeached")); $this->assertEquals(3, $this->TextStatistics->syllableCount("impeding")); $this->assertEquals(3, $this->TextStatistics->syllableCount("imposes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("impounded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("improvement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("improvements")); $this->assertEquals(2, $this->TextStatistics->syllableCount("inbred")); $this->assertEquals(4, $this->TextStatistics->syllableCount("incidences")); $this->assertEquals(4, $this->TextStatistics->syllableCount("inconvenienced")); $this->assertEquals(5, $this->TextStatistics->syllableCount("inconveniences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("increases")); $this->assertEquals(5, $this->TextStatistics->syllableCount("indecisiveness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("indexes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("indices")); $this->assertEquals(4, $this->TextStatistics->syllableCount("indonesian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("induce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("induced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("inducement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("inducements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("induces")); $this->assertEquals(4, $this->TextStatistics->syllableCount("indulgences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("indulges")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ineffectiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("inferences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("influence")); $this->assertEquals(3, $this->TextStatistics->syllableCount("influenced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("influences")); $this->assertEquals(4, $this->TextStatistics->syllableCount("influencing")); $this->assertEquals(4, $this->TextStatistics->syllableCount("influential")); $this->assertEquals(4, $this->TextStatistics->syllableCount("influenza")); $this->assertEquals(3, $this->TextStatistics->syllableCount("infrared")); $this->assertEquals(2, $this->TextStatistics->syllableCount("infringed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("infringement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("infringements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("infringes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("infuses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("injustice")); $this->assertEquals(4, $this->TextStatistics->syllableCount("injustices")); $this->assertEquals(3, $this->TextStatistics->syllableCount("innerspace")); $this->assertEquals(4, $this->TextStatistics->syllableCount("innuendo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("innuendoes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("innuendos")); $this->assertEquals(3, $this->TextStatistics->syllableCount("instances")); $this->assertEquals(7, $this->TextStatistics->syllableCount("institutionalizes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("insurances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("intended")); $this->assertEquals(5, $this->TextStatistics->syllableCount("interacciones")); $this->assertEquals(3, $this->TextStatistics->syllableCount("interbred")); $this->assertEquals(4, $this->TextStatistics->syllableCount("interceding")); $this->assertEquals(4, $this->TextStatistics->syllableCount("interchanges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("interface")); $this->assertEquals(4, $this->TextStatistics->syllableCount("interfaces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("interlaced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("intermingled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("interoffice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("intervoice")); $this->assertEquals(5, $this->TextStatistics->syllableCount("intraocular")); $this->assertEquals(5, $this->TextStatistics->syllableCount("intrauterine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("intriguing")); $this->assertEquals(4, $this->TextStatistics->syllableCount("intriguingly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("introduce")); $this->assertEquals(3, $this->TextStatistics->syllableCount("introduced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("introduces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("inveighed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("inventiveness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("invoice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("invoices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("involve")); $this->assertEquals(3, $this->TextStatistics->syllableCount("involvement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("involves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("iodice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("iona")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ionic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ionics")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ionization")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ionizers")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ionizing")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ionospheric")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ions")); $this->assertEquals(2, $this->TextStatistics->syllableCount("irette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("irises")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ironizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("irvette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("isabelle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("isle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("isles")); $this->assertEquals(5, $this->TextStatistics->syllableCount("isocyanate")); $this->assertEquals(4, $this->TextStatistics->syllableCount("Isozaki")); $this->assertEquals(4, $this->TextStatistics->syllableCount("issuances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("itches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jacksonville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jandreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("janelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("janesville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("janette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jangled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("janice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jarreau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jasmer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jaundice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jaundiced")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jaya")); $this->assertEquals(4, $this->TextStatistics->syllableCount("jayashankar")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jeanbaptiste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jeanette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jeanne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jeannette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jeansonne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jenne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jennette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jenrette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jeske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jetborne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("jeyaretnam")); $this->assertEquals(3, $this->TextStatistics->syllableCount("joffrion")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jolette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("joliet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jolivette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jopling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jorge")); $this->assertEquals(2, $this->TextStatistics->syllableCount("josette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("joshua")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jostes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jostling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("joyal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("joyoni")); $this->assertEquals(2, $this->TextStatistics->syllableCount("joyous")); $this->assertEquals(1, $this->TextStatistics->syllableCount("juan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("juana")); $this->assertEquals(3, $this->TextStatistics->syllableCount("juanita")); $this->assertEquals(2, $this->TextStatistics->syllableCount("juarez")); $this->assertEquals(3, $this->TextStatistics->syllableCount("judaism")); $this->assertEquals(3, $this->TextStatistics->syllableCount("judea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("judeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("judgement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("judgements")); $this->assertEquals(2, $this->TextStatistics->syllableCount("judges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("judgeship")); $this->assertEquals(2, $this->TextStatistics->syllableCount("judgeships")); $this->assertEquals(2, $this->TextStatistics->syllableCount("judice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("juggled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("juices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jukebox")); $this->assertEquals(3, $this->TextStatistics->syllableCount("julia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("julianne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("juliet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("julius")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jumbled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jumonville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("juneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("junette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("junior")); $this->assertEquals(3, $this->TextStatistics->syllableCount("juniors")); $this->assertEquals(2, $this->TextStatistics->syllableCount("justice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("justices")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kageyama")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kamerer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kanghua")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kanne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("karges")); $this->assertEquals(1, $this->TextStatistics->syllableCount("karnes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kasmer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("katayama")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kaya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kayak")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kayaking")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kayaks")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kayo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kemerer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("keo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("keogh")); $this->assertEquals(3, $this->TextStatistics->syllableCount("keohane")); $this->assertEquals(2, $this->TextStatistics->syllableCount("keown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kerestes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kernes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kerrville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("keske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("keville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("keynesian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kibodeaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kidded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kiessling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kilborne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kilbourne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kimche")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kindled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kindred")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kingsville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kinne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kissling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kitchenette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kiyoshi")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kiyotaka")); $this->assertEquals(2, $this->TextStatistics->syllableCount("klages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kleinpaste")); $this->assertEquals(1, $this->TextStatistics->syllableCount("klemme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("knicely")); $this->assertEquals(2, $this->TextStatistics->syllableCount("knoxville")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kobayashi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kocian")); $this->assertEquals(1, $this->TextStatistics->syllableCount("koelle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kolle")); $this->assertEquals(5, $this->TextStatistics->syllableCount("Komsomolskaya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("korfhage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kothe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("koyama")); $this->assertEquals(2, $this->TextStatistics->syllableCount("koyo")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kramme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("krammes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("krasnoyarsk")); $this->assertEquals(1, $this->TextStatistics->syllableCount("krausse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kresge")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kresse")); $this->assertEquals(1, $this->TextStatistics->syllableCount("krumme")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kuenheim")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kuenstler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kuenzi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kunayev")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kuske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("labeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("labelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("labranche")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lacayo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lachapelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lacoste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lacrosse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ladled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lafalce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laflamme")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lafollette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lafosse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lagesse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lajeunesse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lakeside")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lamarche")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lambaste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lambastes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lamme")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lamontagne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lamoreaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lamothe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lamoureaux")); $this->assertEquals(4, $this->TextStatistics->syllableCount("lanceolate")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lancia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("landed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("landreneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("langhorne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("language")); $this->assertEquals(3, $this->TextStatistics->syllableCount("languages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lanouette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lapage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("larche")); $this->assertEquals(2, $this->TextStatistics->syllableCount("larded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lareau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("largesse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lariccia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("larochelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lasalle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lashua")); $this->assertEquals(1, $this->TextStatistics->syllableCount("laske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lasseigne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("latches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("latendresse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lateness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("latexes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lathe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lathes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("latourette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lattice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laurette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laurice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lausanne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lavelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laverne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lavette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lavigne")); $this->assertEquals(4, $this->TextStatistics->syllableCount("laviolette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lawhorne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lawrenceville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("layborne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("layered")); $this->assertEquals(3, $this->TextStatistics->syllableCount("layering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("layoff")); $this->assertEquals(2, $this->TextStatistics->syllableCount("layoffs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("layout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("layouts")); $this->assertEquals(3, $this->TextStatistics->syllableCount("layover")); $this->assertEquals(3, $this->TextStatistics->syllableCount("layovers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leadville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leakage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leatrice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leavelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lebeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ledges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ledonne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("legette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("legged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leggette")); $this->assertEquals(5, $this->TextStatistics->syllableCount("legitimizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leifeste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lemelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leoma")); $this->assertEquals(4, $this->TextStatistics->syllableCount("leominster")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leona")); $this->assertEquals(4, $this->TextStatistics->syllableCount("leonardo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leonel")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leonerd")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leones")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leonhard")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leoni")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leonid")); $this->assertEquals(4, $this->TextStatistics->syllableCount("leonora")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leonore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leontine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leopold")); $this->assertEquals(4, $this->TextStatistics->syllableCount("leopoldine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("leopoldo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leos")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leotard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lepage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lerette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lesage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("leske")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lespinasse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leticia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("letourneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lettice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lettuce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leveille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leverage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leveraged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leverette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("levering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("levesque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lianne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("liberace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("libya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("libyan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("libyans")); $this->assertEquals(3, $this->TextStatistics->syllableCount("licences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("licorice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lighthouses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("likeness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("likenesses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lilyan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("limoges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("linage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lineberry")); $this->assertEquals(2, $this->TextStatistics->syllableCount("linette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lingering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("linkage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("linkages")); $this->assertEquals(1, $this->TextStatistics->syllableCount("linne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("linville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lion")); $this->assertEquals(4, $this->TextStatistics->syllableCount("lionberger")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lionel")); $this->assertEquals(4, $this->TextStatistics->syllableCount("lionetti")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lionheart")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lionized")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lions")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lirette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lisette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("liske")); $this->assertEquals(6, $this->TextStatistics->syllableCount("literaturnaya")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lithe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("littlepage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("loathe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("loathed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lodges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loewe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("logarithm")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("logician")); $this->assertEquals(3, $this->TextStatistics->syllableCount("loguidice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loiselle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lonesome")); $this->assertEquals(2, $this->TextStatistics->syllableCount("looses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lorette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lorne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("losoya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("louisville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lounges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lovage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lovering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lovette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lowering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loyal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("loyalist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("loyalists")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loyall")); $this->assertEquals(3, $this->TextStatistics->syllableCount("loyally")); $this->assertEquals(3, $this->TextStatistics->syllableCount("loyalties")); $this->assertEquals(3, $this->TextStatistics->syllableCount("loyalty")); $this->assertEquals(3, $this->TextStatistics->syllableCount("loyola")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lozeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lozenges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lozoya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lucerne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lucette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lucia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lucian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lucille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lucrecia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("luelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("luggage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lunges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lurches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lurette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lyall")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lyell")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lyerla")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lynette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lynne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mabelle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("macfadyen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("macioce")); $this->assertEquals(6, $this->TextStatistics->syllableCount("macroeconomic")); $this->assertEquals(6, $this->TextStatistics->syllableCount("macroeconomics")); $this->assertEquals(3, $this->TextStatistics->syllableCount("macrophage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("macrophages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("madelle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mademoiselle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maffeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("magician")); $this->assertEquals(3, $this->TextStatistics->syllableCount("magicians")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mahayana")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mahe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mailboxes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("maille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mainville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("majette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("makeover")); $this->assertEquals(3, $this->TextStatistics->syllableCount("makepeace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("malayan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("malaysian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("malaysians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("maleness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("malice")); $this->assertEquals(1, $this->TextStatistics->syllableCount("malle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mallette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("malpractice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("malveaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("manage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("managed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("management")); $this->assertEquals(3, $this->TextStatistics->syllableCount("managements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("manages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mandeville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("manette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maneuvering")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maneuverings")); $this->assertEquals(5, $this->TextStatistics->syllableCount("manganiello")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mangement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("manges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mangione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mangled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("manhandled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("manne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mannes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("manseau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mantua")); $this->assertEquals(4, $this->TextStatistics->syllableCount("manuevering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("manville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marantette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maranville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marceau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marceaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marcelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marcia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marcille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marcoses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("margette")); $this->assertEquals(5, $this->TextStatistics->syllableCount("marginalizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marianne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mariette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marineau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marketplace")); $this->assertEquals(4, $this->TextStatistics->syllableCount("marketplaces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marlette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marmion")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marseille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("martelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("martineau")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maruyama")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maruyu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marvelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maryann")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marysville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maryville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marzette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("masaya")); $this->assertEquals(4, $this->TextStatistics->syllableCount("masayoshi")); $this->assertEquals(4, $this->TextStatistics->syllableCount("masayuki")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mascia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("masiello")); $this->assertEquals(1, $this->TextStatistics->syllableCount("maske")); $this->assertEquals(3, $this->TextStatistics->syllableCount("massacred")); $this->assertEquals(2, $this->TextStatistics->syllableCount("massage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("massaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("massages")); $this->assertEquals(1, $this->TextStatistics->syllableCount("masse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("masterminded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("masterpiece")); $this->assertEquals(4, $this->TextStatistics->syllableCount("masterpieces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mataya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("matches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mateo")); $this->assertEquals(6, $this->TextStatistics->syllableCount("materializes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mathe")); $this->assertEquals(5, $this->TextStatistics->syllableCount("mathematician")); $this->assertEquals(5, $this->TextStatistics->syllableCount("mathematicians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("matherne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("matisse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("matteo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mattice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("maurice")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mauriello")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mauthe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maximizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("maya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mayall")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mayan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("maybelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mayeda")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mayernik")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mayerson")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mayeux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mayo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mayon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mayonnaise")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mayor")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mayoral")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mayoralty")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mayorga")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mayors")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mayville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mazes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mazzeo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcbryar")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mccarville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcconville")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mcfadyen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcginnes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mckeon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mckeone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mckeown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcneece")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcneice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcquaid")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcquaide")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcquaig")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcquain")); $this->assertEquals(3, $this->TextStatistics->syllableCount("measurement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("measurements")); $this->assertEquals(1, $this->TextStatistics->syllableCount("meaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("medea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("megahouses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mehitabelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("meiyuh")); $this->assertEquals(4, $this->TextStatistics->syllableCount("melanesian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("melbourne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("melded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("melisse")); $this->assertEquals(1, $this->TextStatistics->syllableCount("melle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("melville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("menace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("menaced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("menaces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meneses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("menezes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("menges")); $this->assertEquals(1, $this->TextStatistics->syllableCount("menne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("meo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meola")); $this->assertEquals(2, $this->TextStatistics->syllableCount("meow")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mercedeses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("merdyce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("merges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("merhige")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mersereau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mertice")); $this->assertEquals(1, $this->TextStatistics->syllableCount("meske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("message")); $this->assertEquals(3, $this->TextStatistics->syllableCount("messages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("messiaen")); $this->assertEquals(4, $this->TextStatistics->syllableCount("messineo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meteor")); $this->assertEquals(4, $this->TextStatistics->syllableCount("meteoric")); $this->assertEquals(7, $this->TextStatistics->syllableCount("meteorological")); $this->assertEquals(6, $this->TextStatistics->syllableCount("meteorologist")); $this->assertEquals(6, $this->TextStatistics->syllableCount("meteorologists")); $this->assertEquals(6, $this->TextStatistics->syllableCount("meteorology")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meyerhoff")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meyering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meyerman")); $this->assertEquals(4, $this->TextStatistics->syllableCount("meyerowitz")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meyerson")); $this->assertEquals(2, $this->TextStatistics->syllableCount("meyo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meyohas")); $this->assertEquals(2, $this->TextStatistics->syllableCount("micheaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("michelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("microage")); $this->assertEquals(6, $this->TextStatistics->syllableCount("microamerica")); $this->assertEquals(6, $this->TextStatistics->syllableCount("microeconomic")); $this->assertEquals(6, $this->TextStatistics->syllableCount("microeconomics")); $this->assertEquals(6, $this->TextStatistics->syllableCount("microelectronic")); $this->assertEquals(6, $this->TextStatistics->syllableCount("microelectronics")); $this->assertEquals(7, $this->TextStatistics->syllableCount("microelettronica")); $this->assertEquals(4, $this->TextStatistics->syllableCount("micromanage")); $this->assertEquals(5, $this->TextStatistics->syllableCount("micromanagement")); $this->assertEquals(6, $this->TextStatistics->syllableCount("microorganism")); $this->assertEquals(8, $this->TextStatistics->syllableCount("micropaleontology")); $this->assertEquals(2, $this->TextStatistics->syllableCount("midges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("midgette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("midpriced")); $this->assertEquals(1, $this->TextStatistics->syllableCount("miesse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("migneault")); $this->assertEquals(2, $this->TextStatistics->syllableCount("milbourne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mildred")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mileage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("millage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("millette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("milliet")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mimeograph")); $this->assertEquals(3, $this->TextStatistics->syllableCount("minasian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("minassian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("minded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mindedly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mineau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mineo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mineola")); $this->assertEquals(2, $this->TextStatistics->syllableCount("minette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("minges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mingled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("minibuses")); $this->assertEquals(5, $this->TextStatistics->syllableCount("minichiello")); $this->assertEquals(4, $this->TextStatistics->syllableCount("minimizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mintage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("minuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mion")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mirabelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mirage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mirelle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miscayuna")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mischarges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mises")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mishandled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("misjudged")); $this->assertEquals(1, $this->TextStatistics->syllableCount("miske")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mismanaged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mismanagement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mismatches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("misplace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("misplaced")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mispriced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("misstatement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("misstatements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("misuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mixes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miyagawa")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miyahara")); $this->assertEquals(3, $this->TextStatistics->syllableCount("miyako")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miyamori")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miyamoto")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miyasaki")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miyasato")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miyashiro")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miyazaki")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miyazawa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mizelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moccia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("modisette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("molded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("molineaux")); $this->assertEquals(1, $this->TextStatistics->syllableCount("molle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("molyneaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("momayez")); $this->assertEquals(3, $this->TextStatistics->syllableCount("moncayo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("monceaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mondeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("monette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mongeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mongering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mongooses")); $this->assertEquals(5, $this->TextStatistics->syllableCount("monopolizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("monroeville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("montage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("montagne")); $this->assertEquals(4, $this->TextStatistics->syllableCount("montemayor")); $this->assertEquals(5, $this->TextStatistics->syllableCount("montesdeoca")); $this->assertEquals(5, $this->TextStatistics->syllableCount("montevideo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("montoya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("montreal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("montville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moragne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("morice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morisette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morissette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("moriya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("morneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("morneault")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morreale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morrisette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morrissette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morrisville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mortage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mortages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mortgage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mortgaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mortgages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mortician")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moselle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mosque")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mosques")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mousse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mousseau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mouthed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mouthpiece")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mouthpieces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("movement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("movements")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mozelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Muammar")); $this->assertEquals(2, $this->TextStatistics->syllableCount("muddled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("muffled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mughniyeh")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mugniyah")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mullineaux")); $this->assertEquals(4, $this->TextStatistics->syllableCount("multilayered")); $this->assertEquals(3, $this->TextStatistics->syllableCount("multivalve")); $this->assertEquals(3, $this->TextStatistics->syllableCount("multiyear")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mumbled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mumme")); $this->assertEquals(4, $this->TextStatistics->syllableCount("murayama")); $this->assertEquals(2, $this->TextStatistics->syllableCount("muscled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("muses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("musician")); $this->assertEquals(3, $this->TextStatistics->syllableCount("musicians")); $this->assertEquals(1, $this->TextStatistics->syllableCount("muske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mustached")); $this->assertEquals(2, $this->TextStatistics->syllableCount("muzzled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("myatt")); $this->assertEquals(3, $this->TextStatistics->syllableCount("myelin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("myreon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("myrtice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nadeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nagoya")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nairne")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nakayama")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nanette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("naperville")); $this->assertEquals(4, $this->TextStatistics->syllableCount("napoleon")); $this->assertEquals(5, $this->TextStatistics->syllableCount("napoleonic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("narayan")); $this->assertEquals(4, $this->TextStatistics->syllableCount("narayanan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("narcisse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nardiello")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nashua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nashville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nathe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("navarette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("navarrette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("Nazarbayev")); $this->assertEquals(1, $this->TextStatistics->syllableCount("neault")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nechayev")); $this->assertEquals(2, $this->TextStatistics->syllableCount("necklace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("necklaces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nedeau")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nederlandsche")); $this->assertEquals(2, $this->TextStatistics->syllableCount("needled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("neises")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nelle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nelles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nellette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("neo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("neoclassic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("neoclassical")); $this->assertEquals(6, $this->TextStatistics->syllableCount("neoconservative")); $this->assertEquals(6, $this->TextStatistics->syllableCount("neoconservatives")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neola")); $this->assertEquals(5, $this->TextStatistics->syllableCount("neoliberal")); $this->assertEquals(5, $this->TextStatistics->syllableCount("neoliberals")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neoma")); $this->assertEquals(2, $this->TextStatistics->syllableCount("neon")); $this->assertEquals(4, $this->TextStatistics->syllableCount("neonatal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("neons")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neophyte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neophytes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("neoplasm")); $this->assertEquals(5, $this->TextStatistics->syllableCount("neoplatonic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("neoplatonist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neoprene")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neoprobe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("neotenic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("neoteny")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nerice")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nerves")); $this->assertEquals(1, $this->TextStatistics->syllableCount("neste")); $this->assertEquals(3, $this->TextStatistics->syllableCount("netterville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neuroses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("neutralizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("neuville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("neveau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("neville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("newfangled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("newlywed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("newville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nguyen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nibbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nicely")); $this->assertEquals(2, $this->TextStatistics->syllableCount("niceness")); $this->assertEquals(5, $this->TextStatistics->syllableCount("nickelodeon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nicolette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nicolle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nicorette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nieces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nietzsche")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nightstage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nilges")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nilles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ninette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nishiyama")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nixes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noblesse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nobuyuki")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nodded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nolette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nonbusiness")); $this->assertEquals(5, $this->TextStatistics->syllableCount("noncontroversial")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nonesuch")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nonetheless")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nonmanagement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("norcia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("norville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("notches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("notice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noticed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("notices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nottage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nouveau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nouvelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("novice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("novices")); $this->assertEquals(3, $this->TextStatistics->syllableCount("novoa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("noyola")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nuanced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nuances")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nucleonics")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nucleotide")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nudges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nuisances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nureyev")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nyack")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nyenhuis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nyerere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("oakville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("obeirne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("oblige")); $this->assertEquals(2, $this->TextStatistics->syllableCount("obliged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("obliges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("obryan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("obryant")); $this->assertEquals(4, $this->TextStatistics->syllableCount("observances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("observes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("obstetrician")); $this->assertEquals(4, $this->TextStatistics->syllableCount("obstetricians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("obyrne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("occhoa")); $this->assertEquals(4, $this->TextStatistics->syllableCount("occurrences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ochoa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("odea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("odelette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("odeon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("odette")); $this->assertEquals(5, $this->TextStatistics->syllableCount("oesterreichische")); $this->assertEquals(3, $this->TextStatistics->syllableCount("offended")); $this->assertEquals(2, $this->TextStatistics->syllableCount("office")); $this->assertEquals(3, $this->TextStatistics->syllableCount("offices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("offstage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ogled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ohanesian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("OHara")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ohbayashi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("olayan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oleo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("olivette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("omnibuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("oneness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oneok")); $this->assertEquals(2, $this->TextStatistics->syllableCount("onstage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("oozes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("opposes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("opticians")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orabelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oranges")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ordinances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oreffice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orefice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oreo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("organelles")); $this->assertEquals(4, $this->TextStatistics->syllableCount("organizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orgasm")); $this->assertEquals(4, $this->TextStatistics->syllableCount("orifices")); $this->assertEquals(1, $this->TextStatistics->syllableCount("orne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orphanage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("orphanages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("orville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("osage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("osages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("osborne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("osbourne")); $this->assertEquals(4, $this->TextStatistics->syllableCount("osceola")); $this->assertEquals(5, $this->TextStatistics->syllableCount("osteopathic")); $this->assertEquals(6, $this->TextStatistics->syllableCount("osteoporosis")); $this->assertEquals(5, $this->TextStatistics->syllableCount("osterreichische")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ouelette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ouellette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ounces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("outage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("outages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("outhouses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("outpace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("outpaced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("outpaces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("outplacement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("outrage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("outraged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("outrageous")); $this->assertEquals(4, $this->TextStatistics->syllableCount("outrageously")); $this->assertEquals(3, $this->TextStatistics->syllableCount("outrages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("outweighed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ovalle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overcharges")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overcrowded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overdoses")); $this->assertEquals(5, $this->TextStatistics->syllableCount("overextended")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overfunded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("overpriced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overproduce")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overproduced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("overreached")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overseer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overseers")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oversizes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overstatement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overstatements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oyama")); $this->assertEquals(2, $this->TextStatistics->syllableCount("oyen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oyola")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ozanne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ozelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("paccione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("paces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("package")); $this->assertEquals(2, $this->TextStatistics->syllableCount("packaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("packages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("padded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("paddled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("padua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pagette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("paille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("palace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("palaces")); $this->assertEquals(6, $this->TextStatistics->syllableCount("paleobotany")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paleocene")); $this->assertEquals(6, $this->TextStatistics->syllableCount("paleontology")); $this->assertEquals(2, $this->TextStatistics->syllableCount("palette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("paniccia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pantaleo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pantheon")); $this->assertEquals(4, $this->TextStatistics->syllableCount("panzhihua")); $this->assertEquals(4, $this->TextStatistics->syllableCount("papaleo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("papaya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("papayas")); $this->assertEquals(3, $this->TextStatistics->syllableCount("papering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("papineau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("papua")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paradoxes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paraguayan")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paralyzes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("parazoa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("parcplace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("parentage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("parenteau")); $this->assertEquals(4, $this->TextStatistics->syllableCount("parentheses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pariseau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("parisian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("parizeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("parlette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("parnes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("parsonage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("partridges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pascua")); $this->assertEquals(3, $this->TextStatistics->syllableCount("paseo")); $this->assertEquals(1, $this->TextStatistics->syllableCount("paske")); $this->assertEquals(5, $this->TextStatistics->syllableCount("pasquariello")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pasque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("passage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("passages")); $this->assertEquals(1, $this->TextStatistics->syllableCount("paste")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pastes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("patches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pathe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("patrice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("patricia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("patrician")); $this->assertEquals(3, $this->TextStatistics->syllableCount("patricians")); $this->assertEquals(3, $this->TextStatistics->syllableCount("patronage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("paulette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pauses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pavement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pavements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("payable")); $this->assertEquals(3, $this->TextStatistics->syllableCount("payables")); $this->assertEquals(2, $this->TextStatistics->syllableCount("payan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("payeur")); $this->assertEquals(2, $this->TextStatistics->syllableCount("payoff")); $this->assertEquals(2, $this->TextStatistics->syllableCount("payoffs")); $this->assertEquals(3, $this->TextStatistics->syllableCount("payola")); $this->assertEquals(2, $this->TextStatistics->syllableCount("payout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("payouts")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peaceful")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peacefully")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pebereau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peddled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peerage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peladeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pelayo")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pelle")); $this->assertEquals(5, $this->TextStatistics->syllableCount("peloponnesian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("penalizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peonies")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peons")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peony")); $this->assertEquals(4, $this->TextStatistics->syllableCount("peoria")); $this->assertEquals(3, $this->TextStatistics->syllableCount("percentage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("percentages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("perches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("performances")); $this->assertEquals(4, $this->TextStatistics->syllableCount("permissiveness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pernice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("perplexes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("perreault")); $this->assertEquals(4, $this->TextStatistics->syllableCount("perriello")); $this->assertEquals(2, $this->TextStatistics->syllableCount("persian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("persians")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pervasiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("petroleos")); $this->assertEquals(3, $this->TextStatistics->syllableCount("petrossian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("phalanges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("phantasm")); $this->assertEquals(2, $this->TextStatistics->syllableCount("phases")); $this->assertEquals(3, $this->TextStatistics->syllableCount("phileo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("phoenicia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("phoenician")); $this->assertEquals(3, $this->TextStatistics->syllableCount("phoenicians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("phrases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("phua")); $this->assertEquals(3, $this->TextStatistics->syllableCount("physician")); $this->assertEquals(3, $this->TextStatistics->syllableCount("physicians")); $this->assertEquals(6, $this->TextStatistics->syllableCount("phytogeography")); $this->assertEquals(5, $this->TextStatistics->syllableCount("picariello")); $this->assertEquals(3, $this->TextStatistics->syllableCount("picayune")); $this->assertEquals(3, $this->TextStatistics->syllableCount("piccione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pichette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pickled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("picturesque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pieces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("piet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pilferage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pilgrimage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pilgrimages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pillage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pillaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pillages")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pincavage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pineau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pineo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pinette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pinneo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pinsoneault")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pioneer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pioneered")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pioneering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pioneers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("piontek")); $this->assertEquals(4, $this->TextStatistics->syllableCount("piontkowski")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pirouettes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pitches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("placement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("placements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("placencia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("places")); $this->assertEquals(2, $this->TextStatistics->syllableCount("plaguing")); $this->assertEquals(2, $this->TextStatistics->syllableCount("plainclothes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("plascencia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("plasencia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("plasse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("plateau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("plateaued")); $this->assertEquals(2, $this->TextStatistics->syllableCount("playa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("playoff")); $this->assertEquals(2, $this->TextStatistics->syllableCount("playoffs")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pleasantville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pleases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pledges")); $this->assertEquals(4, $this->TextStatistics->syllableCount("plisetskaya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("plodded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("plumage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("plumages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("plunges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pluses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("police")); $this->assertEquals(2, $this->TextStatistics->syllableCount("policed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("polices")); $this->assertEquals(4, $this->TextStatistics->syllableCount("policewoman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("politeness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("politician")); $this->assertEquals(4, $this->TextStatistics->syllableCount("politicians")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pollyanna")); $this->assertEquals(6, $this->TextStatistics->syllableCount("polyacetylene")); $this->assertEquals(3, $this->TextStatistics->syllableCount("polyak")); $this->assertEquals(4, $this->TextStatistics->syllableCount("polyamide")); $this->assertEquals(4, $this->TextStatistics->syllableCount("polyandrous")); $this->assertEquals(4, $this->TextStatistics->syllableCount("polyandry")); $this->assertEquals(4, $this->TextStatistics->syllableCount("polyester")); $this->assertEquals(4, $this->TextStatistics->syllableCount("polyesters")); $this->assertEquals(5, $this->TextStatistics->syllableCount("polyethylene")); $this->assertEquals(5, $this->TextStatistics->syllableCount("polymerizes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("polynesian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pomerleau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pompeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ponsolle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("populace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("porches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("porges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("porpoises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("porsche")); $this->assertEquals(2, $this->TextStatistics->syllableCount("porsches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("portage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("porterages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("portrayal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("portrayals")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("postage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("postponement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("postponements")); $this->assertEquals(2, $this->TextStatistics->syllableCount("postrelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("poultices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poundage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pounded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("powerhouses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("powering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("practice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("practiced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("practices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("praises")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pralle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prattville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("preaches")); $this->assertEquals(5, $this->TextStatistics->syllableCount("preadolescent")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preamble")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prearranged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preceding")); $this->assertEquals(3, $this->TextStatistics->syllableCount("precipice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("predaceous")); $this->assertEquals(4, $this->TextStatistics->syllableCount("preeminence")); $this->assertEquals(4, $this->TextStatistics->syllableCount("preeminent")); $this->assertEquals(2, $this->TextStatistics->syllableCount("preempt")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preempted")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preemption")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preemptive")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preexist")); $this->assertEquals(4, $this->TextStatistics->syllableCount("preexisted")); $this->assertEquals(4, $this->TextStatistics->syllableCount("preexisting")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preexists")); $this->assertEquals(2, $this->TextStatistics->syllableCount("preface")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prefaced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preferenced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("preferences")); $this->assertEquals(4, $this->TextStatistics->syllableCount("preignition")); $this->assertEquals(4, $this->TextStatistics->syllableCount("preinvasion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preisler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prejudged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prejudice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prejudiced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("prejudices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("premed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("premiering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("premises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prentice")); $this->assertEquals(5, $this->TextStatistics->syllableCount("preoccupation")); $this->assertEquals(5, $this->TextStatistics->syllableCount("preoccupations")); $this->assertEquals(4, $this->TextStatistics->syllableCount("preoccupied")); $this->assertEquals(4, $this->TextStatistics->syllableCount("preoccupies")); $this->assertEquals(4, $this->TextStatistics->syllableCount("preoccupy")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preordained")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prepackaged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("prerecorded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("presage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("presaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("presages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("presences")); $this->assertEquals(2, $this->TextStatistics->syllableCount("preserves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prestage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prestige")); $this->assertEquals(4, $this->TextStatistics->syllableCount("presupposes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pretended")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prevette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("priceless")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prideaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("primeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("primeaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("primroses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("princes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("princeville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("principled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prindiville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prioleau")); $this->assertEquals(5, $this->TextStatistics->syllableCount("prioritizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("privette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("proactive")); $this->assertEquals(3, $this->TextStatistics->syllableCount("probusiness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("procurement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("procurements")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prodded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("produce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("produced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("produces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prognoses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("programme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prolonged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("prominences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("promises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pronounced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pronouncement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pronouncements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pronounces")); $this->assertEquals(4, $this->TextStatistics->syllableCount("propionic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("proposes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("propounded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("proscia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("prospectuses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prostheses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("proteges")); $this->assertEquals(4, $this->TextStatistics->syllableCount("protozoa")); $this->assertEquals(5, $this->TextStatistics->syllableCount("protuberances")); $this->assertEquals(5, $this->TextStatistics->syllableCount("provideniya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("provinces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prudhomme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pruneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prussian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("puleo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pulice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pumice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("purchases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("purges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("purposes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("purves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("purveyor")); $this->assertEquals(3, $this->TextStatistics->syllableCount("purveyors")); $this->assertEquals(2, $this->TextStatistics->syllableCount("puzzled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pyatt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pyeatt")); $this->assertEquals(3, $this->TextStatistics->syllableCount("quadrupled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quai")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quaid")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quail")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quails")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quain")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quaint")); $this->assertEquals(2, $this->TextStatistics->syllableCount("quaintance")); $this->assertEquals(2, $this->TextStatistics->syllableCount("quaintly")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quamme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("queau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("quebedeaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("quellette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("quenneville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("queuing")); $this->assertEquals(3, $this->TextStatistics->syllableCount("quintupled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("quivering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rabideau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("racehorses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("races")); $this->assertEquals(2, $this->TextStatistics->syllableCount("racette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rachelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("radborne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("radbourne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("radice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ragged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rahe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rainville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("raises")); $this->assertEquals(3, $this->TextStatistics->syllableCount("raleses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ramage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rambeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rambled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rambling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rameses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rampage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rampaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rampages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ranges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rankled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rapprochement")); $this->assertEquals(1, $this->TextStatistics->syllableCount("raske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rathburne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rathe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rattling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ravaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ravages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("raya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rayon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rayos")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rayovac")); $this->assertEquals(3, $this->TextStatistics->syllableCount("raytheon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reabsorbed")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reactionaries")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reactionary")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reactions")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reaganesque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("realign")); $this->assertEquals(3, $this->TextStatistics->syllableCount("realigned")); $this->assertEquals(4, $this->TextStatistics->syllableCount("realigning")); $this->assertEquals(4, $this->TextStatistics->syllableCount("realignment")); $this->assertEquals(4, $this->TextStatistics->syllableCount("realignments")); $this->assertEquals(4, $this->TextStatistics->syllableCount("realistic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("realities")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reality")); $this->assertEquals(5, $this->TextStatistics->syllableCount("realizable")); $this->assertEquals(4, $this->TextStatistics->syllableCount("realizes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reallocate")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reallocated")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reallocating")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reallocation")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reallowance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("realtor")); $this->assertEquals(3, $this->TextStatistics->syllableCount("realtors")); $this->assertEquals(3, $this->TextStatistics->syllableCount("realty")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reappraised")); $this->assertEquals(1, $this->TextStatistics->syllableCount("reaume")); $this->assertEquals(1, $this->TextStatistics->syllableCount("reaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rebounded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("receding")); $this->assertEquals(4, $this->TextStatistics->syllableCount("recognizes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("recommended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("recorded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("recovering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("recycled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("redhanded")); $this->assertEquals(5, $this->TextStatistics->syllableCount("rediscovering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("redoubled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reduce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reduced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reduces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reemerge")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reemerged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reestablished")); $this->assertEquals(3, $this->TextStatistics->syllableCount("referenced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("references")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refinanced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("refinances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refinement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refinements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reflexes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("refocuses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("refuge")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refuges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refunded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refuses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("regarded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reimposed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("rejiggering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rejoice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rejoiced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rekindled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("relaunched")); $this->assertEquals(3, $this->TextStatistics->syllableCount("relaxes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("releases")); $this->assertEquals(3, $this->TextStatistics->syllableCount("remanded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("remembrances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reminded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reminisced")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reminiscences")); $this->assertEquals(4, $this->TextStatistics->syllableCount("remittances")); $this->assertEquals(1, $this->TextStatistics->syllableCount("remme")); $this->assertEquals(3, $this->TextStatistics->syllableCount("remolded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("remoteness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("remoulded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("renege")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reneged")); $this->assertEquals(1, $this->TextStatistics->syllableCount("renne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("renounced")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reoffer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reoffered")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reoffering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reopen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reopened")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reopening")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reopens")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reorder")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reordering")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reorganization")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reorganizations")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reorganize")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reorganized")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reorganizes")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reorganizing")); $this->assertEquals(3, $this->TextStatistics->syllableCount("repackage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("repackaged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("repackages")); $this->assertEquals(4, $this->TextStatistics->syllableCount("repayable")); $this->assertEquals(2, $this->TextStatistics->syllableCount("replace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("replaced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("replacement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("replacements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("replaces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reportage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reprice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("repriced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reprimanded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reproduce")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reproduced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reproduces")); $this->assertEquals(4, $this->TextStatistics->syllableCount("repurchases")); $this->assertEquals(3, $this->TextStatistics->syllableCount("requirement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("requirements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rescinded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("researches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("resemblances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("resembled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reserves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reshuffled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("residences")); $this->assertEquals(4, $this->TextStatistics->syllableCount("resistiveness")); $this->assertEquals(1, $this->TextStatistics->syllableCount("reske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("resolve")); $this->assertEquals(2, $this->TextStatistics->syllableCount("resolves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("resources")); $this->assertEquals(3, $this->TextStatistics->syllableCount("responded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("responsiveness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("restaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("restatement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("restatements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("restiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("restrictiveness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("resurface")); $this->assertEquals(3, $this->TextStatistics->syllableCount("resurfaced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("retarded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("retirements")); $this->assertEquals(2, $this->TextStatistics->syllableCount("retrace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("retraced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("retracement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("retrenched")); $this->assertEquals(5, $this->TextStatistics->syllableCount("retroviruses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reused")); $this->assertEquals(2, $this->TextStatistics->syllableCount("revelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("revette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("revises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("revolve")); $this->assertEquals(2, $this->TextStatistics->syllableCount("revolves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rewarded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("rhapsodizes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rheault")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rheaume")); $this->assertEquals(4, $this->TextStatistics->syllableCount("rhetoricians")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rhodesian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhythm")); $this->assertEquals(2, $this->TextStatistics->syllableCount("riddled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rideau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rideaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ridges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("riendeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rifled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("righteous")); $this->assertEquals(3, $this->TextStatistics->syllableCount("righteously")); $this->assertEquals(3, $this->TextStatistics->syllableCount("righteousness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rillette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rinne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rion")); $this->assertEquals(2, $this->TextStatistics->syllableCount("riposte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ripostes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rippeon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rippled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rises")); $this->assertEquals(1, $this->TextStatistics->syllableCount("riske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("risse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("riverbed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rivette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("riviello")); $this->assertEquals(2, $this->TextStatistics->syllableCount("riyad")); $this->assertEquals(2, $this->TextStatistics->syllableCount("riyadh")); $this->assertEquals(2, $this->TextStatistics->syllableCount("riyals")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("robicheaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("robideau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("robinette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("robitaille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rocheleau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rochelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rochette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rockville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rodeo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rodeos")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roebling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("roelle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("roeske")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rohleder")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rolle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("romances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("romanesque")); $this->assertEquals(5, $this->TextStatistics->syllableCount("romaniello")); $this->assertEquals(2, $this->TextStatistics->syllableCount("romelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("romeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rondeau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ronne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rosabelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosanne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roseanne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("roseberry")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosettes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roseville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("roske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rosse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rossiya")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rothe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rototilles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rougeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rouleau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roulette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roulettes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rounded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rounsaville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rousse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rousseau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rousselle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rowlette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roxanne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("royal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("royale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("royalist")); $this->assertEquals(2, $this->TextStatistics->syllableCount("royall")); $this->assertEquals(2, $this->TextStatistics->syllableCount("royals")); $this->assertEquals(3, $this->TextStatistics->syllableCount("royalties")); $this->assertEquals(3, $this->TextStatistics->syllableCount("royalty")); $this->assertEquals(2, $this->TextStatistics->syllableCount("royces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("royex")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rozelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rudelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rudeness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ruffled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rugged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ruggedly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rumage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rumbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rummage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rumpled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ruses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("russe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("russellville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("russian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("russians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ryal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ryall")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ryals")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ryan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ryanair")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ryans")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ryen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sabotage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sabotaged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sackville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sacred")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sacrifice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sacrificed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sacrifices")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sacrilege")); $this->assertEquals(2, $this->TextStatistics->syllableCount("saddled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("salemme")); $this->assertEquals(3, $this->TextStatistics->syllableCount("saleswoman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("saleswomen")); $this->assertEquals(1, $this->TextStatistics->syllableCount("salle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("salvage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("salvaged")); $this->assertEquals(1, $this->TextStatistics->syllableCount("salve")); $this->assertEquals(1, $this->TextStatistics->syllableCount("salves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("samelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sameness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("samoa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sampled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sancia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sandage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sanded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sandwiched")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sannes")); $this->assertEquals(5, $this->TextStatistics->syllableCount("santaniello")); $this->assertEquals(4, $this->TextStatistics->syllableCount("santayana")); $this->assertEquals(3, $this->TextStatistics->syllableCount("santoyo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sanville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sapoa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sarcasm")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sarette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sarkisian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sarkissian")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sasse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("satirizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sauces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sausage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sausages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sauternes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sauvage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sauvageau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("savage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("savaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("savagely")); $this->assertEquals(3, $this->TextStatistics->syllableCount("savages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("saville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sawaya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sawtelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sayad")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sayegh")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scaccia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scarface")); $this->assertEquals(1, $this->TextStatistics->syllableCount("scarves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scherer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schiewe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schnelle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("scholle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sciascia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scion")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scolded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sconces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scorpion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scorpions")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scotches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scourges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scoville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scrambled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scratches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scribbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scrimmage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("scrutinizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scuffled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seaborne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("searches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sebaceous")); $this->assertEquals(3, $this->TextStatistics->syllableCount("seceding")); $this->assertEquals(3, $this->TextStatistics->syllableCount("seconded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("secretiveness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seduce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seduced")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seepage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("seethe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("seigniorage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("seiyaku")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seiyu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seizes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("selle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("selvage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("selves")); $this->assertEquals(6, $this->TextStatistics->syllableCount("semiautomatic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("semionenkov")); $this->assertEquals(1, $this->TextStatistics->syllableCount("semmes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("senne")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sensitiveness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sentelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sentenced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sentences")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seow")); $this->assertEquals(4, $this->TextStatistics->syllableCount("separateness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sequoyah")); $this->assertEquals(1, $this->TextStatistics->syllableCount("serves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("service")); $this->assertEquals(2, $this->TextStatistics->syllableCount("serviced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("services")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("severing")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sewage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sewerage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sexes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sfernice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shackled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shaquille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sharpeville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sheathe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sheathed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shelburne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shelbyville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("shelve")); $this->assertEquals(1, $this->TextStatistics->syllableCount("shelves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shepherded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sherborne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sherbourne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sherburne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shielded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shigeo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("shionogi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shivering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shiyuan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shoelace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shoelaces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shortage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shortages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shortchanged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("showcases")); $this->assertEquals(3, $this->TextStatistics->syllableCount("showering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("showpiece")); $this->assertEquals(2, $this->TextStatistics->syllableCount("showplace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shredded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shreveport")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shrinkage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shuffled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shuffling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("siang")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sias")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sibelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sibille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sibling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("siblings")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidekick")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sideline")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidelined")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidelines")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sideman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sideshow")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidestep")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidestepped")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sidestepping")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidesteps")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidestream")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidetrack")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidewalk")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidewalks")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sidewater")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sideways")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sidewinder")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidewise")); $this->assertEquals(2, $this->TextStatistics->syllableCount("signage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("silenced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("silences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sileo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("silhouette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("silhouettes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("silverthorne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("simeon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("simeone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("simoneau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("simoneaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("simonette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("simpleminded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("simplesse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sincavage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Sindayen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("singled")); $this->assertEquals(5, $this->TextStatistics->syllableCount("singlehandedly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sinuses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sithe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sixes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sizzled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("skeoch")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sketches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("skewering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("skidded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("skyboxes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("slaughterhouses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("slices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("slippage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("smoothed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("smuggled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("smythe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("snarled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("snatches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sobering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("socia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("softimage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("soileau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sokaiya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("solace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("soldiering")); $this->assertEquals(1, $this->TextStatistics->syllableCount("solve")); $this->assertEquals(1, $this->TextStatistics->syllableCount("solves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("somerville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sommerville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sonne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("soothe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("soothed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("soothes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sorbonne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sorcerer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sorcerers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sorice")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sotomayor")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sounded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sources")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sourrouille")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sovetskaya")); $this->assertEquals(3, $this->TextStatistics->syllableCount("soviet")); $this->assertEquals(6, $this->TextStatistics->syllableCount("sovietologist")); $this->assertEquals(2, $this->TextStatistics->syllableCount("soya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("soyars")); $this->assertEquals(2, $this->TextStatistics->syllableCount("soysauce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("soyuz")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spaceport")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spaces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spaceship")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spaceships")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spangled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sparkled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spasm")); $this->assertEquals(4, $this->TextStatistics->syllableCount("specializes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("speckled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("splices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spoilage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("spokeswoman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("spokewoman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sponges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sporleder")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spouses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("springerville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sprinkled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squabbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squillace")); $this->assertEquals(4, $this->TextStatistics->syllableCount("stabilizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stacia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("staggering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("staircases")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stampeding")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stances")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stapled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("starches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("starnes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("statement")); $this->assertEquals(2, $this->TextStatistics->syllableCount("statements")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stateside")); $this->assertEquals(4, $this->TextStatistics->syllableCount("statistician")); $this->assertEquals(4, $this->TextStatistics->syllableCount("statisticians")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stayover")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stayovers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("steakhouses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stearne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("steenkiste")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stephenville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stereo")); $this->assertEquals(5, $this->TextStatistics->syllableCount("stereographic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stereos")); $this->assertEquals(4, $this->TextStatistics->syllableCount("stereotype")); $this->assertEquals(4, $this->TextStatistics->syllableCount("stereotyped")); $this->assertEquals(4, $this->TextStatistics->syllableCount("stereotypes")); $this->assertEquals(6, $this->TextStatistics->syllableCount("stereotypical")); $this->assertEquals(5, $this->TextStatistics->syllableCount("stereotyping")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sterilizes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sterne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("steubenville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stifled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stinnette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stitches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("stockbrokerage")); $this->assertEquals(5, $this->TextStatistics->syllableCount("stockbrokerages")); $this->assertEquals(4, $this->TextStatistics->syllableCount("stolichnaya")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stolle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stooges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoppage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stoppages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stopwatches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("storage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("straddled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("straddling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("straggled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("straitlaced")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stranded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("strangeness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("strangled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stretches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stromme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("struggled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("studded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stumbled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stumpage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sturges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stuteville")); $this->assertEquals(4, $this->TextStatistics->syllableCount("subsidizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("substances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("subsurface")); $this->assertEquals(3, $this->TextStatistics->syllableCount("subterfuge")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suffice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sufficed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("suffices")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suffrage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("suffragettes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("suggestiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sugiyama")); $this->assertEquals(1, $this->TextStatistics->syllableCount("suisse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("suitcases")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sukiyaki")); $this->assertEquals(4, $this->TextStatistics->syllableCount("summarizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("summerville")); $this->assertEquals(4, $this->TextStatistics->syllableCount("superseding")); $this->assertEquals(4, $this->TextStatistics->syllableCount("supervises")); $this->assertEquals(4, $this->TextStatistics->syllableCount("supposedly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("supposes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surcharges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("surette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("surface")); $this->assertEquals(2, $this->TextStatistics->syllableCount("surfaced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surfaceness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surfaces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("surges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surmises")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surpluses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surprises")); $this->assertEquals(4, $this->TextStatistics->syllableCount("surrealisms")); $this->assertEquals(2, $this->TextStatistics->syllableCount("surrette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surrounded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surtaxes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surveyor")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surveyors")); $this->assertEquals(2, $this->TextStatistics->syllableCount("susanne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("susette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("suspended")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suzanne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suzette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sverige")); $this->assertEquals(3, $this->TextStatistics->syllableCount("swaggering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("swatches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("swathed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("swinburnes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("swindled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("switches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sybille")); $this->assertEquals(3, $this->TextStatistics->syllableCount("symbion")); $this->assertEquals(4, $this->TextStatistics->syllableCount("symbolizes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("symmes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sympathizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("syringes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tableau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tableaux")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tabled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tackled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tactician")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tacticians")); $this->assertEquals(3, $this->TextStatistics->syllableCount("taddeo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tafoya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("taiyo")); $this->assertEquals(5, $this->TextStatistics->syllableCount("takashimaya")); $this->assertEquals(4, $this->TextStatistics->syllableCount("takayama")); $this->assertEquals(3, $this->TextStatistics->syllableCount("takeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("talmage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tamayo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tangled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tapering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tasm")); $this->assertEquals(1, $this->TextStatistics->syllableCount("taste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tasteful")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tastefully")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tasteless")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tastes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tauruses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("taxes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("teases")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tebeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("technician")); $this->assertEquals(3, $this->TextStatistics->syllableCount("technicians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("teenage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("teenaged")); $this->assertEquals(5, $this->TextStatistics->syllableCount("telemanagement")); $this->assertEquals(5, $this->TextStatistics->syllableCount("televideo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("telexes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("telles")); $this->assertEquals(1, $this->TextStatistics->syllableCount("temme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tended")); $this->assertEquals(2, $this->TextStatistics->syllableCount("teo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("teodoro")); $this->assertEquals(4, $this->TextStatistics->syllableCount("teriyaki")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ternes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("terrace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("terraced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("terraces")); $this->assertEquals(4, $this->TextStatistics->syllableCount("terrorizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("teruya")); $this->assertEquals(1, $this->TextStatistics->syllableCount("teske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tetreault")); $this->assertEquals(3, $this->TextStatistics->syllableCount("thaddea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thatches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thebeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("themselves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("theo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theobald")); $this->assertEquals(4, $this->TextStatistics->syllableCount("theocracy")); $this->assertEquals(4, $this->TextStatistics->syllableCount("theocratic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theodor")); $this->assertEquals(4, $this->TextStatistics->syllableCount("theodora")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theodore")); $this->assertEquals(4, $this->TextStatistics->syllableCount("theodorou")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theodric")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theola")); $this->assertEquals(5, $this->TextStatistics->syllableCount("theologian")); $this->assertEquals(5, $this->TextStatistics->syllableCount("theological")); $this->assertEquals(4, $this->TextStatistics->syllableCount("theology")); $this->assertEquals(2, $this->TextStatistics->syllableCount("theon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("theone")); $this->assertEquals(5, $this->TextStatistics->syllableCount("theophania")); $this->assertEquals(4, $this->TextStatistics->syllableCount("theophila")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theora")); $this->assertEquals(5, $this->TextStatistics->syllableCount("theoretical")); $this->assertEquals(6, $this->TextStatistics->syllableCount("theoretically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theorist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theorists")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theorize")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theorized")); $this->assertEquals(4, $this->TextStatistics->syllableCount("theorizes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("theorizing")); $this->assertEquals(2, $this->TextStatistics->syllableCount("theses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("thibadeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thibeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thibeault")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thibeaux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("thibedeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("thibodeau")); $this->assertEquals(3, $this->TextStatistics->syllableCount("thibodeaux")); $this->assertEquals(1, $this->TextStatistics->syllableCount("thinnes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("thoennes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("thomases")); $this->assertEquals(3, $this->TextStatistics->syllableCount("thomasville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thoreau")); $this->assertEquals(1, $this->TextStatistics->syllableCount("thorne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("thoroughbred")); $this->assertEquals(3, $this->TextStatistics->syllableCount("throneberry")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tickled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tilles")); $this->assertEquals(1, $this->TextStatistics->syllableCount("timme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tinkled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tithe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("titusville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toddling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("toelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toggled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toggling")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tokuyama")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tolerances")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tolle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tolles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tomeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tondreau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tonnage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tonnages")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tonne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tonnes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("toothed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toothpaste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toothpastes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toppled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("torches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("torosian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("torreon")); $this->assertEquals(4, $this->TextStatistics->syllableCount("torsiello")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tortoises")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tortorice")); $this->assertEquals(5, $this->TextStatistics->syllableCount("tortoriello")); $this->assertEquals(4, $this->TextStatistics->syllableCount("toshiyuki")); $this->assertEquals(1, $this->TextStatistics->syllableCount("toste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("touchette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tourangeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tourville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("towering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("townhouses")); $this->assertEquals(3, $this->TextStatistics->syllableCount("toyama")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toyo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("toyobo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("toyoda")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toyoo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("toyota")); $this->assertEquals(3, $this->TextStatistics->syllableCount("toyotas")); $this->assertEquals(2, $this->TextStatistics->syllableCount("traces")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tracheophytes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trackage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("trageser")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trampled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("transcended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("transimage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("treatises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trebled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trefgarne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("treharne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trembled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trended")); $this->assertEquals(2, $this->TextStatistics->syllableCount("treon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("triage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tricia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trickled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("trieste")); $this->assertEquals(3, $this->TextStatistics->syllableCount("triggering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tripled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trivette")); $this->assertEquals(5, $this->TextStatistics->syllableCount("trivializes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("troubled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("troyan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("troyanos")); $this->assertEquals(2, $this->TextStatistics->syllableCount("troyat")); $this->assertEquals(2, $this->TextStatistics->syllableCount("troyu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trudeau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trudges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trundled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tryart")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tsiang")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tsuneo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tuberville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tumbled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tunisian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("turberville")); $this->assertEquals(4, $this->TextStatistics->syllableCount("turbocharges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("turenne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("turnage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("turville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tussled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tutelage")); $this->assertEquals(1, $this->TextStatistics->syllableCount("twelve")); $this->assertEquals(2, $this->TextStatistics->syllableCount("twitches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("udelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ulloa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("umbrage")); $this->assertEquals(5, $this->TextStatistics->syllableCount("unabashedly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unabridged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unacknowledged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unamended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unannounced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unattached")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unattended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unbalanced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unbounded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unbranded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unbridled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unchallenged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unchanged")); $this->assertEquals(5, $this->TextStatistics->syllableCount("uncontroversial")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unconvinced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uncovering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("undamaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("underage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("underfinanced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("underfunded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("underhanded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("underprice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("underpriced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("understatement")); $this->assertEquals(5, $this->TextStatistics->syllableCount("unemployable")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unfenced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unfolded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unfounded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unfunded")); $this->assertEquals(4, $this->TextStatistics->syllableCount("Ungeheuer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ungerer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unguarded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unhedged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unheralded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unhinged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unintended")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unionfed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uniroyal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unmanage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unmanaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unnoticed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unpayable")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unplaced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unprincipled")); $this->assertEquals(5, $this->TextStatistics->syllableCount("unreality")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unrealized")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unrecorded")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unruffled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unscathed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unshackled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("untouched")); $this->assertEquals(3, $this->TextStatistics->syllableCount("untroubled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unwavering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("upended")); $this->assertEquals(2, $this->TextStatistics->syllableCount("upstage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("upstaged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Ural")); $this->assertEquals(2, $this->TextStatistics->syllableCount("urges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Urquart")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uruguayan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("usage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("usages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("uses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("uthe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("utilizes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Uttar")); $this->assertEquals(4, $this->TextStatistics->syllableCount("utterances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("uyeda")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uyehara")); $this->assertEquals(3, $this->TextStatistics->syllableCount("uyeno")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Uzis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vacaville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valeo")); $this->assertEquals(1, $this->TextStatistics->syllableCount("valle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("valleau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vallely")); $this->assertEquals(1, $this->TextStatistics->syllableCount("valles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vallette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("valve")); $this->assertEquals(1, $this->TextStatistics->syllableCount("valves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vanasse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vandamme")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vanderslice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vandewalle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vanhorne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vannguyen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vannice")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vanscoyoc")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vantage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vantages")); $this->assertEquals(4, $this->TextStatistics->syllableCount("variances")); $this->assertEquals(1, $this->TextStatistics->syllableCount("varnes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("varves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vases")); $this->assertEquals(1, $this->TextStatistics->syllableCount("vaske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vaudeville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vaxes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vedette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("veillette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("velayati")); $this->assertEquals(4, $this->TextStatistics->syllableCount("venereal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("venice")); $this->assertEquals(1, $this->TextStatistics->syllableCount("venne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("venturesome")); $this->assertEquals(3, $this->TextStatistics->syllableCount("verbiage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("verges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("verhage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vermette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("verne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("vernes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("verrette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("versace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("versailles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("verville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vestige")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vestiges")); $this->assertEquals(1, $this->TextStatistics->syllableCount("vette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vices")); $this->assertEquals(3, $this->TextStatistics->syllableCount("video")); $this->assertEquals(4, $this->TextStatistics->syllableCount("videodisk")); $this->assertEquals(4, $this->TextStatistics->syllableCount("videodisks")); $this->assertEquals(4, $this->TextStatistics->syllableCount("videogame")); $this->assertEquals(4, $this->TextStatistics->syllableCount("videophone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("videos")); $this->assertEquals(4, $this->TextStatistics->syllableCount("videotape")); $this->assertEquals(4, $this->TextStatistics->syllableCount("videotaped")); $this->assertEquals(4, $this->TextStatistics->syllableCount("videotapes")); $this->assertEquals(5, $this->TextStatistics->syllableCount("videotaping")); $this->assertEquals(4, $this->TextStatistics->syllableCount("videotex")); $this->assertEquals(4, $this->TextStatistics->syllableCount("videotext")); $this->assertEquals(4, $this->TextStatistics->syllableCount("videotron")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vienneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("viet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vigneau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vigneault")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vignette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vignettes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("village")); $this->assertEquals(3, $this->TextStatistics->syllableCount("villages")); $this->assertEquals(4, $this->TextStatistics->syllableCount("villareal")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("villette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vincelette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("vindictiveness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vingmed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vintage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vintages")); $this->assertEquals(4, $this->TextStatistics->syllableCount("violation")); $this->assertEquals(3, $this->TextStatistics->syllableCount("violette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("viruses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("visage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("vitiello")); $this->assertEquals(3, $this->TextStatistics->syllableCount("viverette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("viyella")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vizcaya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("voges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("voiceless")); $this->assertEquals(2, $this->TextStatistics->syllableCount("voices")); $this->assertEquals(1, $this->TextStatistics->syllableCount("volle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("voltage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("voltages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("voyage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("voyaged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("voyager")); $this->assertEquals(3, $this->TextStatistics->syllableCount("voyagers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("voyages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("voyeur")); $this->assertEquals(4, $this->TextStatistics->syllableCount("voyeurism")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vremya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wadded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("waffled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("waffling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wagering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wages")); $this->assertEquals(5, $this->TextStatistics->syllableCount("wakabayashi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wallace")); $this->assertEquals(1, $this->TextStatistics->syllableCount("walle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("walles")); $this->assertEquals(4, $this->TextStatistics->syllableCount("wallpapering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("walruses")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wangled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wantage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wantages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("warded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("warehime")); $this->assertEquals(2, $this->TextStatistics->syllableCount("warehouse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("warehousing")); $this->assertEquals(4, $this->TextStatistics->syllableCount("warmongering")); $this->assertEquals(1, $this->TextStatistics->syllableCount("warne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("warnes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("washburne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wasmer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("waste")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wasteful")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wastes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("watches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("waterbed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("waterborne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("watsonville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wavering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("waxes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Wayans")); $this->assertEquals(2, $this->TextStatistics->syllableCount("waynesville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wedded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wedges")); $this->assertEquals(1, $this->TextStatistics->syllableCount("weisse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("welborne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("welded")); $this->assertEquals(1, $this->TextStatistics->syllableCount("welle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("welles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wentzville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wernette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wesleyan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("westburne")); $this->assertEquals(4, $this->TextStatistics->syllableCount("westfaelisches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weyand")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weyandt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weyant")); $this->assertEquals(3, $this->TextStatistics->syllableCount("whampoa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wheezes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whiteness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whiteside")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitesides")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whittling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wholesome")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wicked")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wickedly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wielded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wilbourne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("willabelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("willamette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wille")); $this->assertEquals(1, $this->TextStatistics->syllableCount("willes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("willette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wilmette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("winborne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("winded")); $this->assertEquals(1, $this->TextStatistics->syllableCount("winne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("winterbourne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wion")); $this->assertEquals(2, $this->TextStatistics->syllableCount("witches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wobbled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("woeste")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wolle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wolves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("worded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("workplace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("workplaces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wounded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wrangled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wreckage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wretched")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wretchedly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wrinkled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wristwatches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wyand")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wyant")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wyatt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wyeth")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wynne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wythe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("xinhua")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Yanayev")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yardage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("yasuyoshi")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yelle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yeo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yeses")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yeske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yevette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yielded")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ying")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yinger")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yodice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yohe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("yokoyama")); $this->assertEquals(4, $this->TextStatistics->syllableCount("yoneyama")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yourselves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("youville")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yuille")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yvette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yvonne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zanoyan")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zaske")); $this->assertEquals(4, $this->TextStatistics->syllableCount("zaslavskaya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zayac")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zayas")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zeebrugge")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zegeer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zelaya")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zeoli")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zeos")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zieske")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zion")); $this->assertEquals(4, $this->TextStatistics->syllableCount("zionism")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zionist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zionists")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zions")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zises")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ziyad")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ziyang")); $this->assertEquals(4, $this->TextStatistics->syllableCount("zoologist")); $this->assertEquals(4, $this->TextStatistics->syllableCount("zoology")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zornes")); // Stop here and mark this test as incomplete. $this->markTestIncomplete( 'Tests above this line are expected to pass. Tests after this line may fail due to code issues, or due to the test being incorrect..' ); $this->assertEquals(2, $this->TextStatistics->syllableCount("aguiar")); $this->assertEquals(5, $this->TextStatistics->syllableCount("aguinaga")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ahmed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aichi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aida")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aidan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aikin")); $this->assertEquals(2, $this->TextStatistics->syllableCount("airedale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("aires")); $this->assertEquals(1, $this->TextStatistics->syllableCount("aithne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aiton")); $this->assertEquals(4, $this->TextStatistics->syllableCount("albanese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("albea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("albeit")); $this->assertEquals(3, $this->TextStatistics->syllableCount("albemarle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("alchemically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aldape")); $this->assertEquals(1, $this->TextStatistics->syllableCount("aldys")); $this->assertEquals(5, $this->TextStatistics->syllableCount("aleatory")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alehouse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aleksandr")); $this->assertEquals(2, $this->TextStatistics->syllableCount("aleman")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aleshire")); $this->assertEquals(4, $this->TextStatistics->syllableCount("alethea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alewife")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alewine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alewives")); $this->assertEquals(4, $this->TextStatistics->syllableCount("alfiero")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alfonse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("alfonsine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alfred")); $this->assertEquals(4, $this->TextStatistics->syllableCount("algebraic")); $this->assertEquals(2, $this->TextStatistics->syllableCount("algiers")); $this->assertEquals(4, $this->TextStatistics->syllableCount("algonquian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("algorithms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("alguire")); $this->assertEquals(4, $this->TextStatistics->syllableCount("alicea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("alienate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("alire")); $this->assertEquals(4, $this->TextStatistics->syllableCount("allegedly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("allegiance")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alleman")); $this->assertEquals(4, $this->TextStatistics->syllableCount("allender")); $this->assertEquals(3, $this->TextStatistics->syllableCount("almaguer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aloia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aloisia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aloysia")); $this->assertEquals(5, $this->TextStatistics->syllableCount("alphabetically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("alphonse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("altaic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("althea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("altomare")); $this->assertEquals(4, $this->TextStatistics->syllableCount("altruism")); $this->assertEquals(4, $this->TextStatistics->syllableCount("altruistic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("alvares")); $this->assertEquals(4, $this->TextStatistics->syllableCount("alysia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("amadeus")); $this->assertEquals(4, $this->TextStatistics->syllableCount("amalea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amalia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ambience")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ambient")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ambiguities")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ambitious")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ambitiously")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ambler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ambrosine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amelia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ameline")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ameliorate")); $this->assertEquals(4, $this->TextStatistics->syllableCount("amerine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ammonia")); $this->assertEquals(5, $this->TextStatistics->syllableCount("amphitheater")); $this->assertEquals(5, $this->TextStatistics->syllableCount("amphitheaters")); $this->assertEquals(5, $this->TextStatistics->syllableCount("amphitheatre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("amrhein")); $this->assertEquals(5, $this->TextStatistics->syllableCount("amyotrophic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("anachronisms")); $this->assertEquals(5, $this->TextStatistics->syllableCount("anacostia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("analogue")); $this->assertEquals(5, $this->TextStatistics->syllableCount("analytically")); $this->assertEquals(5, $this->TextStatistics->syllableCount("anatomically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("andean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("andrea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("andreas")); $this->assertEquals(4, $this->TextStatistics->syllableCount("andreini")); $this->assertEquals(3, $this->TextStatistics->syllableCount("andren")); $this->assertEquals(3, $this->TextStatistics->syllableCount("angeles")); $this->assertEquals(4, $this->TextStatistics->syllableCount("angelically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("angelone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anglen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("angove")); $this->assertEquals(4, $this->TextStatistics->syllableCount("anguiano")); $this->assertEquals(3, $this->TextStatistics->syllableCount("annese")); $this->assertEquals(4, $this->TextStatistics->syllableCount("annuities")); $this->assertEquals(4, $this->TextStatistics->syllableCount("annunciata")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anreder")); $this->assertEquals(1, $this->TextStatistics->syllableCount("anse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anstine")); $this->assertEquals(5, $this->TextStatistics->syllableCount("antagonisms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("antares")); $this->assertEquals(2, $this->TextStatistics->syllableCount("antenne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anthea")); $this->assertEquals(1, $this->TextStatistics->syllableCount("anthes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anthiel")); $this->assertEquals(4, $this->TextStatistics->syllableCount("antigone")); $this->assertEquals(4, $this->TextStatistics->syllableCount("antigones")); $this->assertEquals(5, $this->TextStatistics->syllableCount("antinuclear")); $this->assertEquals(2, $this->TextStatistics->syllableCount("antique")); $this->assertEquals(2, $this->TextStatistics->syllableCount("antiques")); $this->assertEquals(4, $this->TextStatistics->syllableCount("antiquity")); $this->assertEquals(3, $this->TextStatistics->syllableCount("antisense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("antone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("antunes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("anxieties")); $this->assertEquals(4, $this->TextStatistics->syllableCount("anxiety")); $this->assertEquals(2, $this->TextStatistics->syllableCount("anxious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anxiously")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anyon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("anyone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aoki")); $this->assertEquals(2, $this->TextStatistics->syllableCount("aon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aorta")); $this->assertEquals(3, $this->TextStatistics->syllableCount("apache")); $this->assertEquals(3, $this->TextStatistics->syllableCount("apaches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("apelike")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aphorisms")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aphrodites")); $this->assertEquals(3, $this->TextStatistics->syllableCount("apnea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("apocalypse")); $this->assertEquals(6, $this->TextStatistics->syllableCount("apologetically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("appalachian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("appalachians")); $this->assertEquals(4, $this->TextStatistics->syllableCount("appreciable")); $this->assertEquals(4, $this->TextStatistics->syllableCount("appreciably")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aprea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("aquirre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arabe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arai")); $this->assertEquals(4, $this->TextStatistics->syllableCount("arakelian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("aravind")); $this->assertEquals(3, $this->TextStatistics->syllableCount("archaic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("archetypal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("archibeque")); $this->assertEquals(4, $this->TextStatistics->syllableCount("archimedes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ardine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("arduini")); $this->assertEquals(3, $this->TextStatistics->syllableCount("area")); $this->assertEquals(3, $this->TextStatistics->syllableCount("areas")); $this->assertEquals(4, $this->TextStatistics->syllableCount("arguable")); $this->assertEquals(4, $this->TextStatistics->syllableCount("arguably")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ariel")); $this->assertEquals(4, $this->TextStatistics->syllableCount("armbrister")); $this->assertEquals(1, $this->TextStatistics->syllableCount("armes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("armine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arnone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("arquette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("arrieta")); $this->assertEquals(3, $this->TextStatistics->syllableCount("artale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("artcarved")); $this->assertEquals(4, $this->TextStatistics->syllableCount("artistically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ascii")); $this->assertEquals(3, $this->TextStatistics->syllableCount("asea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("asean")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aseltine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ashe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("asheville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("asiel")); $this->assertEquals(3, $this->TextStatistics->syllableCount("askren")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aspires")); $this->assertEquals(2, $this->TextStatistics->syllableCount("aspirin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("assembler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("assemblers")); $this->assertEquals(7, $this->TextStatistics->syllableCount("assicurazioni")); $this->assertEquals(3, $this->TextStatistics->syllableCount("assiduous")); $this->assertEquals(4, $this->TextStatistics->syllableCount("assiduously")); $this->assertEquals(4, $this->TextStatistics->syllableCount("assuredly")); $this->assertEquals(6, $this->TextStatistics->syllableCount("astrogeology")); $this->assertEquals(5, $this->TextStatistics->syllableCount("astronomically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("atheist")); $this->assertEquals(4, $this->TextStatistics->syllableCount("atheistic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("atheists")); $this->assertEquals(4, $this->TextStatistics->syllableCount("athenaios")); $this->assertEquals(4, $this->TextStatistics->syllableCount("athletically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("attache")); $this->assertEquals(3, $this->TextStatistics->syllableCount("attaches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("atteberry")); $this->assertEquals(3, $this->TextStatistics->syllableCount("attebury")); $this->assertEquals(3, $this->TextStatistics->syllableCount("attire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("audrie")); $this->assertEquals(1, $this->TextStatistics->syllableCount("aue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("auerback")); $this->assertEquals(2, $this->TextStatistics->syllableCount("aug")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aurea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("australia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("australian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("australians")); $this->assertEquals(6, $this->TextStatistics->syllableCount("austroasiatic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("authentically")); $this->assertEquals(5, $this->TextStatistics->syllableCount("automatically")); $this->assertEquals(5, $this->TextStatistics->syllableCount("automoviles")); $this->assertEquals(4, $this->TextStatistics->syllableCount("auxiliary")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ave")); $this->assertEquals(4, $this->TextStatistics->syllableCount("aveline")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aven")); $this->assertEquals(3, $this->TextStatistics->syllableCount("averages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("averaging")); $this->assertEquals(6, $this->TextStatistics->syllableCount("aviazione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aviles")); $this->assertEquals(4, $this->TextStatistics->syllableCount("avionic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("avionics")); $this->assertEquals(3, $this->TextStatistics->syllableCount("avions")); $this->assertEquals(2, $this->TextStatistics->syllableCount("awesome")); $this->assertEquals(2, $this->TextStatistics->syllableCount("awestruck")); $this->assertEquals(2, $this->TextStatistics->syllableCount("awfully")); $this->assertEquals(3, $this->TextStatistics->syllableCount("aydelotte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ayodhya")); $this->assertEquals(2, $this->TextStatistics->syllableCount("babblers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("babyish")); $this->assertEquals(5, $this->TextStatistics->syllableCount("baccalaureate")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bacchanalia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bachelors")); $this->assertEquals(1, $this->TextStatistics->syllableCount("backe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("backes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("backfired")); $this->assertEquals(3, $this->TextStatistics->syllableCount("backfires")); $this->assertEquals(4, $this->TextStatistics->syllableCount("backfiring")); $this->assertEquals(2, $this->TextStatistics->syllableCount("backlogged")); $this->assertEquals(1, $this->TextStatistics->syllableCount("baer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baez")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bahre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baidoan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baidoans")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baidoas")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baiul")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bakeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bakeware")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bakewell")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bakke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("balaguer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("baldassare")); $this->assertEquals(4, $this->TextStatistics->syllableCount("balentine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("balfe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baliles")); $this->assertEquals(1, $this->TextStatistics->syllableCount("balke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ballentine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ballyhooed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("baltes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bandolier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bandoliers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("banjoist")); $this->assertEquals(1, $this->TextStatistics->syllableCount("banke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bankes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("banque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baoguang")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baptisms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baptistery")); $this->assertEquals(1, $this->TextStatistics->syllableCount("barbe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barefoot")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bareknuckle")); $this->assertEquals(4, $this->TextStatistics->syllableCount("barentine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("barfknecht")); $this->assertEquals(1, $this->TextStatistics->syllableCount("barke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barkeley")); $this->assertEquals(1, $this->TextStatistics->syllableCount("barkes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("barlettesville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baroque")); $this->assertEquals(1, $this->TextStatistics->syllableCount("barres")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barrientes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("barriere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("barthelme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("barthes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bartl")); $this->assertEquals(5, $this->TextStatistics->syllableCount("bartolomei")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bartone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baseball")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baseballs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baseboard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baseboards")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baseline")); $this->assertEquals(2, $this->TextStatistics->syllableCount("baseman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("basically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("basler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("basore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bassler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bateman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bathke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("batte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("battiato")); $this->assertEquals(4, $this->TextStatistics->syllableCount("batuigas")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baudoin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("baumler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bayerische")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bazemore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bbc")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bbq")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beaches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beachler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("beaird")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beata")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beato")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beatrice")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beauce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beauchesne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beautifully")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bebe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bedient")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beebe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beebes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("beer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("beers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beforehand")); $this->assertEquals(2, $this->TextStatistics->syllableCount("begeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("begnoche")); $this->assertEquals(3, $this->TextStatistics->syllableCount("begonia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("begonias")); $this->assertEquals(1, $this->TextStatistics->syllableCount("begue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("behavior")); $this->assertEquals(4, $this->TextStatistics->syllableCount("behavioral")); $this->assertEquals(4, $this->TextStatistics->syllableCount("behaviorists")); $this->assertEquals(3, $this->TextStatistics->syllableCount("behaviors")); $this->assertEquals(1, $this->TextStatistics->syllableCount("behlke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("behne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("behnke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("behringwerke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beidler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beiersdorf")); $this->assertEquals(1, $this->TextStatistics->syllableCount("beijer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("beilke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beitler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("belfiore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("belgian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("belgians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("belgique")); $this->assertEquals(2, $this->TextStatistics->syllableCount("belier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("belke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bellevue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bellone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("belongia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("belote")); $this->assertEquals(1, $this->TextStatistics->syllableCount("belshe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("belying")); $this->assertEquals(4, $this->TextStatistics->syllableCount("benavides")); $this->assertEquals(2, $this->TextStatistics->syllableCount("benches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bendure")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bene")); $this->assertEquals(2, $this->TextStatistics->syllableCount("benecke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("benequity")); $this->assertEquals(2, $this->TextStatistics->syllableCount("benes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("benevides")); $this->assertEquals(5, $this->TextStatistics->syllableCount("bengoechea")); $this->assertEquals(1, $this->TextStatistics->syllableCount("benke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("benoist")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bente")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beougher")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bequeath")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bequeathed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bequette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("berdine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("berea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beresford")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bergeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bergemann")); $this->assertEquals(3, $this->TextStatistics->syllableCount("berghuis")); $this->assertEquals(1, $this->TextStatistics->syllableCount("berke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("berkeley")); $this->assertEquals(1, $this->TextStatistics->syllableCount("berkes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("berlascone")); $this->assertEquals(1, $this->TextStatistics->syllableCount("berle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("berlottes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bermea")); $this->assertEquals(1, $this->TextStatistics->syllableCount("berres")); $this->assertEquals(3, $this->TextStatistics->syllableCount("berrien")); $this->assertEquals(1, $this->TextStatistics->syllableCount("berte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bertilde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bertling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bertone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("besler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bessire")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bessler")); $this->assertEquals(5, $this->TextStatistics->syllableCount("bestiality")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bethea")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bethke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beucler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beumer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beutler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("beuys")); $this->assertEquals(3, $this->TextStatistics->syllableCount("beverages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bewitched")); $this->assertEquals(5, $this->TextStatistics->syllableCount("biagioni")); $this->assertEquals(4, $this->TextStatistics->syllableCount("biaxial")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bichler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bicycling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("biedermeier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("biegler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bielke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bieniek")); $this->assertEquals(3, $this->TextStatistics->syllableCount("biennale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("biennial")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bierer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bierly")); $this->assertEquals(1, $this->TextStatistics->syllableCount("biers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bigler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("billiard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("billiards")); $this->assertEquals(5, $this->TextStatistics->syllableCount("biologically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("biomed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("biosafety")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bioscience")); $this->assertEquals(5, $this->TextStatistics->syllableCount("biosciences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("birchler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("birkeland")); $this->assertEquals(1, $this->TextStatistics->syllableCount("birkes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("birle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bitesize")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bitler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bivouac")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bizarre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bizarrely")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bjerke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blakeley")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blakeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blakemore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blakeney")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blakeslee")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blakesley")); $this->assertEquals(1, $this->TextStatistics->syllableCount("blanke")); $this->assertEquals(5, $this->TextStatistics->syllableCount("blankenbeckler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("blaschke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("blasia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("blasingame")); $this->assertEquals(4, $this->TextStatistics->syllableCount("blassingame")); $this->assertEquals(1, $this->TextStatistics->syllableCount("blauer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("blessed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("blitzed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("blonde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("blondes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bloodshed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("blouin")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bluest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bluey")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bluish")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Bnai")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boas")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boaz")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bodine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("boehlke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("boehme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("boehne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("boehnke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("boening")); $this->assertEquals(1, $this->TextStatistics->syllableCount("boer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("boers")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bogue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("boheme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bohlke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bohne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("boies")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boise")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boleware")); $this->assertEquals(5, $this->TextStatistics->syllableCount("bollettieri")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bolognese")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bolte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bombardier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bonaparte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bonde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bonebrake")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bonecrusher")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bonecutter")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bonenfant")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bonesteel")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bonet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bonfire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bonfires")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bongiorno")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bongiovanni")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bonine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bonneville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bonnevilles")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bonsignore")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bonte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("booed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bordenave")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bordes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boredom")); $this->assertEquals(2, $this->TextStatistics->syllableCount("borgia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("borneman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bornemann")); $this->assertEquals(3, $this->TextStatistics->syllableCount("boroian")); $this->assertEquals(1, $this->TextStatistics->syllableCount("borre")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boseman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bosler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bottler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bottlers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bottone")); $this->assertEquals(5, $this->TextStatistics->syllableCount("bougainvillea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bourgeois")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bourgeoisie")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bourke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bournewood")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bourque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boutique")); $this->assertEquals(2, $this->TextStatistics->syllableCount("boutiques")); $this->assertEquals(1, $this->TextStatistics->syllableCount("boutte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bovespa")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bowles")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bowne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bowse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bowyer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("boyea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bozeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("braaten")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bracelet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bracelets")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bracewell")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brakebill")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brakefield")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brakeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brakemen")); $this->assertEquals(1, $this->TextStatistics->syllableCount("brakke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bramalea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("branches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("brande")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brandeberry")); $this->assertEquals(1, $this->TextStatistics->syllableCount("brandes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brandl")); $this->assertEquals(1, $this->TextStatistics->syllableCount("braque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brasilia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("braziers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brazilian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brazilians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brcko")); $this->assertEquals(2, $this->TextStatistics->syllableCount("breaches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("breezeway")); $this->assertEquals(3, $this->TextStatistics->syllableCount("breitling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("brekke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("brendlinger")); $this->assertEquals(2, $this->TextStatistics->syllableCount("breneman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brennecke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brenneke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brenneman")); $this->assertEquals(4, $this->TextStatistics->syllableCount("brentlinger")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bressler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("briarcliff")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridegroom")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridesmaid")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridesmaids")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridgeforth")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridgehead")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridgeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridgestone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bridgeton")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bridgewater")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brien")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brierley")); $this->assertEquals(1, $this->TextStatistics->syllableCount("brietzke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brigadier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brigitte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brigode")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brilliance")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brilliant")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brilliantly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("briones")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bristling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brittian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("brizendine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("broerman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bronze")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brookehill")); $this->assertEquals(3, $this->TextStatistics->syllableCount("brouhard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brouillard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brouillet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brouillette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("browne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("browse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brueggeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brueggemann")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bruella")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bruggeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bruin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bruington")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bruins")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bruinsma")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brunches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("brunke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("brunnhilde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bruynes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bruzzese")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bryon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bt")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bta")); $this->assertEquals(4, $this->TextStatistics->syllableCount("bucciarelli")); $this->assertEquals(3, $this->TextStatistics->syllableCount("buchler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("buckler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("budai")); $this->assertEquals(1, $this->TextStatistics->syllableCount("budde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("buechler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buell")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buffeted")); $this->assertEquals(3, $this->TextStatistics->syllableCount("buffone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bugling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buick")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buicks")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bulthuis")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bunches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bunde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bundling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bundren")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bungling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bunke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("bunte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("bunzl")); $this->assertEquals(4, $this->TextStatistics->syllableCount("buonocore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buoy")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buoyed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buoys")); $this->assertEquals(3, $this->TextStatistics->syllableCount("burdine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("burdines")); $this->assertEquals(1, $this->TextStatistics->syllableCount("burke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("burkes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("burres")); $this->assertEquals(3, $this->TextStatistics->syllableCount("burriss")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buseman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("businessland")); $this->assertEquals(3, $this->TextStatistics->syllableCount("businesslike")); $this->assertEquals(3, $this->TextStatistics->syllableCount("businessman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("businessmen")); $this->assertEquals(4, $this->TextStatistics->syllableCount("businesswoman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("busler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bussiere")); $this->assertEquals(3, $this->TextStatistics->syllableCount("bustling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("butare")); $this->assertEquals(1, $this->TextStatistics->syllableCount("butte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("buttler")); $this->assertEquals(5, $this->TextStatistics->syllableCount("byelorussia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("byington")); $this->assertEquals(2, $this->TextStatistics->syllableCount("byus")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cabinetry")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cabrales")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cacao")); $this->assertEquals(4, $this->TextStatistics->syllableCount("caccavale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cacciola")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caceres")); $this->assertEquals(2, $this->TextStatistics->syllableCount("caches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cacioppo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cacique")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cackling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cadotte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("caesarea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cafiero")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cahouet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caiazzo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("caillouet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caiola")); $this->assertEquals(4, $this->TextStatistics->syllableCount("calabrese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("calame")); $this->assertEquals(3, $this->TextStatistics->syllableCount("calcote")); $this->assertEquals(4, $this->TextStatistics->syllableCount("calderone")); $this->assertEquals(4, $this->TextStatistics->syllableCount("calliope")); $this->assertEquals(4, $this->TextStatistics->syllableCount("calliopes")); $this->assertEquals(5, $this->TextStatistics->syllableCount("caltagirone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("camire")); $this->assertEquals(4, $this->TextStatistics->syllableCount("campanale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("campfire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("campfires")); $this->assertEquals(4, $this->TextStatistics->syllableCount("campione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("canace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("canale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cananea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("candler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cangialosi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("canipe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cannone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cansler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cantone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cantv")); $this->assertEquals(2, $this->TextStatistics->syllableCount("caouette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("capehart")); $this->assertEquals(2, $this->TextStatistics->syllableCount("capetown")); $this->assertEquals(4, $this->TextStatistics->syllableCount("caplinger")); $this->assertEquals(4, $this->TextStatistics->syllableCount("caporale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("caracciolo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("caradine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cardinale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cardoen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cardone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("carefree")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caregivers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carelessness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("caremark")); $this->assertEquals(2, $this->TextStatistics->syllableCount("careplus")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caretaker")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caretakers")); $this->assertEquals(4, $this->TextStatistics->syllableCount("caribbean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carinii")); $this->assertEquals(1, $this->TextStatistics->syllableCount("carles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("carleton")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carlone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carlyon")); $this->assertEquals(4, $this->TextStatistics->syllableCount("carnevale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carnine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("carre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carrere")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carriages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("carriere")); $this->assertEquals(4, $this->TextStatistics->syllableCount("carrizales")); $this->assertEquals(1, $this->TextStatistics->syllableCount("carte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("carusone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("casal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("casale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("casares")); $this->assertEquals(3, $this->TextStatistics->syllableCount("casciato")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cascone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("casebolt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("caseload")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caseworker")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caseworkers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cashier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cashiers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("casler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cassese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cassia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cassone")); $this->assertEquals(4, $this->TextStatistics->syllableCount("casstevens")); $this->assertEquals(5, $this->TextStatistics->syllableCount("castiglione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("castine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("castorena")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cataclysm")); $this->assertEquals(3, $this->TextStatistics->syllableCount("catalogue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("catalogued")); $this->assertEquals(3, $this->TextStatistics->syllableCount("catalogues")); $this->assertEquals(4, $this->TextStatistics->syllableCount("catalonia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("catanese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("catania")); $this->assertEquals(5, $this->TextStatistics->syllableCount("categorically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("catharine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("catharines")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cathmor")); $this->assertEquals(2, $this->TextStatistics->syllableCount("catholic")); $this->assertEquals(2, $this->TextStatistics->syllableCount("catholics")); $this->assertEquals(2, $this->TextStatistics->syllableCount("causeway")); $this->assertEquals(2, $this->TextStatistics->syllableCount("causeways")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cautious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cautiously")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cautiousness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cavalier")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cavaliere")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cavalierly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cavaliers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caveat")); $this->assertEquals(3, $this->TextStatistics->syllableCount("caveats")); $this->assertEquals(2, $this->TextStatistics->syllableCount("caveman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cawsl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cazares")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cd")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cdebaca")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cecelia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cecere")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cecilia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cedrone")); $this->assertEquals(4, $this->TextStatistics->syllableCount("celestine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("celia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("celosia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cenozoic")); $this->assertEquals(2, $this->TextStatistics->syllableCount("centerre")); $this->assertEquals(4, $this->TextStatistics->syllableCount("centurion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cercone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ceres")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cerone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cerrone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cervone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cesare")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cespedes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cevaxs")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chaidez")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chairez")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chandelier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chandeliers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chaos")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chaotic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chappuis")); $this->assertEquals(6, $this->TextStatistics->syllableCount("characteristically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("charest")); $this->assertEquals(1, $this->TextStatistics->syllableCount("charles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("charleston")); $this->assertEquals(2, $this->TextStatistics->syllableCount("charlestown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("charlotte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("charlottesville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("charlottetown")); $this->assertEquals(3, $this->TextStatistics->syllableCount("charpentier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cheeseburger")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cheeseburgers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cheesecake")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cheeseman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chemed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chemically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chengxiang")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cheque")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cheques")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chesler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chevalier")); $this->assertEquals(4, $this->TextStatistics->syllableCount("chevrier")); $this->assertEquals(4, $this->TextStatistics->syllableCount("chianese")); $this->assertEquals(1, $this->TextStatistics->syllableCount("chiang")); $this->assertEquals(4, $this->TextStatistics->syllableCount("chiappone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chiara")); $this->assertEquals(4, $this->TextStatistics->syllableCount("chicagoans")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chihuahua")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chikane")); $this->assertEquals(1, $this->TextStatistics->syllableCount("childe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chile")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chilean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chileans")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chisler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("chiu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chloe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chmiel")); $this->assertEquals(4, $this->TextStatistics->syllableCount("chmielewski")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chmura")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chocolat")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chocolate")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chocolates")); $this->assertEquals(3, $this->TextStatistics->syllableCount("choiniere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("choir")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chopsuey")); $this->assertEquals(2, $this->TextStatistics->syllableCount("choquette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("chortling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chouinard")); $this->assertEquals(4, $this->TextStatistics->syllableCount("chrismer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("christiana")); $this->assertEquals(3, $this->TextStatistics->syllableCount("christiane")); $this->assertEquals(5, $this->TextStatistics->syllableCount("christianity")); $this->assertEquals(4, $this->TextStatistics->syllableCount("christiano")); $this->assertEquals(2, $this->TextStatistics->syllableCount("christophe")); $this->assertEquals(5, $this->TextStatistics->syllableCount("chronologically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chrzan")); $this->assertEquals(4, $this->TextStatistics->syllableCount("chrzanowski")); $this->assertEquals(1, $this->TextStatistics->syllableCount("chseing")); $this->assertEquals(1, $this->TextStatistics->syllableCount("chuang")); $this->assertEquals(2, $this->TextStatistics->syllableCount("chui")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ciaccia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ciaccio")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ciampa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ciampi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cianci")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ciancio")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cianciola")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cianciolo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cianciulli")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ciani")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ciaobella")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ciaramella")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ciaramitaro")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ciaravino")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ciardi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ciarlo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ciavarella")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cicalese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ciccone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cicely")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cinque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ciocca")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ciolino")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ciotti")); $this->assertEquals(3, $this->TextStatistics->syllableCount("circling")); $this->assertEquals(4, $this->TextStatistics->syllableCount("circuitous")); $this->assertEquals(3, $this->TextStatistics->syllableCount("circumference")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cirque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cisler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cityfed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ciucci")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ciulla")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ciullo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("civilian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("civilians")); $this->assertEquals(1, $this->TextStatistics->syllableCount("clague")); $this->assertEquals(2, $this->TextStatistics->syllableCount("claremont")); $this->assertEquals(3, $this->TextStatistics->syllableCount("clarion")); $this->assertEquals(1, $this->TextStatistics->syllableCount("clarke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("classically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cleah")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cleanse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cleaveland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cleveland")); $this->assertEquals(3, $this->TextStatistics->syllableCount("clevelanders")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clevetrust")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cliche")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cliched")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cliches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cliffe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clinches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("clique")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cliques")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cloey")); $this->assertEquals(2, $this->TextStatistics->syllableCount("closedown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("closedowns")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clotheshorse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clothestime")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clothier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clothiers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clothilde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clouatre")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cluett")); $this->assertEquals(2, $this->TextStatistics->syllableCount("clydesdale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cmon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cmos")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cmx")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coaches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coady")); $this->assertEquals(1, $this->TextStatistics->syllableCount("coale")); $this->assertEquals(1, $this->TextStatistics->syllableCount("coals")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coalson")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coate")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coates")); $this->assertEquals(1, $this->TextStatistics->syllableCount("coaxed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coaxum")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cobbler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cobblers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cochlea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cochlear")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cocke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cockroaches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coderre")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coeds")); $this->assertEquals(6, $this->TextStatistics->syllableCount("coeducational")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coefficient")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coefficients")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coelho")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coello")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coenen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coenzyme")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coequal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coerce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coerced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coercing")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coercive")); $this->assertEquals(1, $this->TextStatistics->syllableCount("coeur")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coexist")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coexisted")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coexistence")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coexisting")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coey")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cogema")); $this->assertEquals(5, $this->TextStatistics->syllableCount("coglianese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cohea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coincide")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coincided")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coincidence")); $this->assertEquals(5, $this->TextStatistics->syllableCount("coincidences")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coincident")); $this->assertEquals(5, $this->TextStatistics->syllableCount("coincidental")); $this->assertEquals(6, $this->TextStatistics->syllableCount("coincidentally")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coincides")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coinciding")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coinsurance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cojuangco")); $this->assertEquals(4, $this->TextStatistics->syllableCount("colaianni")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coldren")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colebank")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colebrook")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colegrove")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coleman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coleridge")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coleslaw")); $this->assertEquals(3, $this->TextStatistics->syllableCount("colestipol")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colestock")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coleus")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coline")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coliseum")); $this->assertEquals(2, $this->TextStatistics->syllableCount("collapse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colleague")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colleagues")); $this->assertEquals(3, $this->TextStatistics->syllableCount("collegians")); $this->assertEquals(3, $this->TextStatistics->syllableCount("collegiate")); $this->assertEquals(2, $this->TextStatistics->syllableCount("collier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colliers")); $this->assertEquals(4, $this->TextStatistics->syllableCount("collodion")); $this->assertEquals(4, $this->TextStatistics->syllableCount("colloquial")); $this->assertEquals(4, $this->TextStatistics->syllableCount("colloquium")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colonel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("colonels")); $this->assertEquals(3, $this->TextStatistics->syllableCount("colorfully")); $this->assertEquals(4, $this->TextStatistics->syllableCount("colosseum")); $this->assertEquals(4, $this->TextStatistics->syllableCount("colourful")); $this->assertEquals(3, $this->TextStatistics->syllableCount("comanches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("combe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("combes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("comeback")); $this->assertEquals(2, $this->TextStatistics->syllableCount("comebacks")); $this->assertEquals(2, $this->TextStatistics->syllableCount("comedown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("comfed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("commemorative")); $this->assertEquals(4, $this->TextStatistics->syllableCount("commercebancorp")); $this->assertEquals(4, $this->TextStatistics->syllableCount("commerciale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("commerical")); $this->assertEquals(4, $this->TextStatistics->syllableCount("commingling")); $this->assertEquals(4, $this->TextStatistics->syllableCount("complementary")); $this->assertEquals(3, $this->TextStatistics->syllableCount("comrie")); $this->assertEquals(4, $this->TextStatistics->syllableCount("comunale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("concorde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("conde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("condense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("condren")); $this->assertEquals(3, $this->TextStatistics->syllableCount("condry")); $this->assertEquals(3, $this->TextStatistics->syllableCount("conduit")); $this->assertEquals(3, $this->TextStatistics->syllableCount("conduits")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coneflower")); $this->assertEquals(3, $this->TextStatistics->syllableCount("conferencing")); $this->assertEquals(3, $this->TextStatistics->syllableCount("confidante")); $this->assertEquals(7, $this->TextStatistics->syllableCount("confidentiality")); $this->assertEquals(5, $this->TextStatistics->syllableCount("confucianism")); $this->assertEquals(3, $this->TextStatistics->syllableCount("congenial")); $this->assertEquals(2, $this->TextStatistics->syllableCount("conquer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("conquers")); $this->assertEquals(4, $this->TextStatistics->syllableCount("consequences")); $this->assertEquals(2, $this->TextStatistics->syllableCount("conserved")); $this->assertEquals(3, $this->TextStatistics->syllableCount("consortiums")); $this->assertEquals(3, $this->TextStatistics->syllableCount("conspire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("conspired")); $this->assertEquals(5, $this->TextStatistics->syllableCount("construcciones")); $this->assertEquals(3, $this->TextStatistics->syllableCount("contagious")); $this->assertEquals(4, $this->TextStatistics->syllableCount("contagiousness")); $this->assertEquals(1, $this->TextStatistics->syllableCount("conte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("contemptuously")); $this->assertEquals(3, $this->TextStatistics->syllableCount("contentious")); $this->assertEquals(4, $this->TextStatistics->syllableCount("contentiousness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("continuum")); $this->assertEquals(2, $this->TextStatistics->syllableCount("converged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("conyer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("conyers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coogler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("coombe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("coombes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cooperate")); $this->assertEquals(5, $this->TextStatistics->syllableCount("cooperated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cooperates")); $this->assertEquals(5, $this->TextStatistics->syllableCount("cooperating")); $this->assertEquals(5, $this->TextStatistics->syllableCount("cooperation")); $this->assertEquals(5, $this->TextStatistics->syllableCount("cooperations")); $this->assertEquals(5, $this->TextStatistics->syllableCount("cooperative")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coordinate")); $this->assertEquals(5, $this->TextStatistics->syllableCount("coordinated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("coordinates")); $this->assertEquals(5, $this->TextStatistics->syllableCount("coordinating")); $this->assertEquals(5, $this->TextStatistics->syllableCount("coordination")); $this->assertEquals(5, $this->TextStatistics->syllableCount("coordinator")); $this->assertEquals(5, $this->TextStatistics->syllableCount("coordinators")); $this->assertEquals(2, $this->TextStatistics->syllableCount("copeland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("copeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("copiague")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coplen")); $this->assertEquals(4, $this->TextStatistics->syllableCount("copytele")); $this->assertEquals(3, $this->TextStatistics->syllableCount("corbusier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cordes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cordial")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cordially")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cordry")); $this->assertEquals(3, $this->TextStatistics->syllableCount("corea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("corestates")); $this->assertEquals(2, $this->TextStatistics->syllableCount("coretech")); $this->assertEquals(4, $this->TextStatistics->syllableCount("Corleone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cornea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("corneas")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cornelia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cornelius")); $this->assertEquals(5, $this->TextStatistics->syllableCount("corporacion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("corporatewatch")); $this->assertEquals(4, $this->TextStatistics->syllableCount("corporatewide")); $this->assertEquals(1, $this->TextStatistics->syllableCount("corpse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("corrales")); $this->assertEquals(3, $this->TextStatistics->syllableCount("correa")); $this->assertEquals(1, $this->TextStatistics->syllableCount("corte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cortes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cortese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("corzine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cosme")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cosmetically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cothren")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cotler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cotrone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cottone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("couches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("couillard")); $this->assertEquals(1, $this->TextStatistics->syllableCount("couldnt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("courchesne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("courtemanche")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coval")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coyote")); $this->assertEquals(3, $this->TextStatistics->syllableCount("coyotes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cozine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("crabbe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cradling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cranesbills")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crary")); $this->assertEquals(3, $this->TextStatistics->syllableCount("creager")); $this->assertEquals(2, $this->TextStatistics->syllableCount("create")); $this->assertEquals(3, $this->TextStatistics->syllableCount("created")); $this->assertEquals(2, $this->TextStatistics->syllableCount("creates")); $this->assertEquals(3, $this->TextStatistics->syllableCount("creating")); $this->assertEquals(3, $this->TextStatistics->syllableCount("creation")); $this->assertEquals(5, $this->TextStatistics->syllableCount("creationism")); $this->assertEquals(3, $this->TextStatistics->syllableCount("creations")); $this->assertEquals(3, $this->TextStatistics->syllableCount("creative")); $this->assertEquals(4, $this->TextStatistics->syllableCount("creatively")); $this->assertEquals(5, $this->TextStatistics->syllableCount("creativity")); $this->assertEquals(3, $this->TextStatistics->syllableCount("creator")); $this->assertEquals(3, $this->TextStatistics->syllableCount("creators")); $this->assertEquals(1, $this->TextStatistics->syllableCount("creer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("creque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cressler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crimea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crisler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cristiani")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cristiano")); $this->assertEquals(4, $this->TextStatistics->syllableCount("criterion")); $this->assertEquals(4, $this->TextStatistics->syllableCount("criticisms")); $this->assertEquals(2, $this->TextStatistics->syllableCount("critique")); $this->assertEquals(2, $this->TextStatistics->syllableCount("critiques")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crnkovich")); $this->assertEquals(2, $this->TextStatistics->syllableCount("croat")); $this->assertEquals(3, $this->TextStatistics->syllableCount("croatia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("croatian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("croatians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("croats")); $this->assertEquals(2, $this->TextStatistics->syllableCount("croce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crocheted")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cronauer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cronyism")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crooked")); $this->assertEquals(1, $this->TextStatistics->syllableCount("crounse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crovl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crovls")); $this->assertEquals(1, $this->TextStatistics->syllableCount("crowne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crownx")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crozier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cruea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cruel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cruey")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cruikshank")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crumpler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("crunches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cryolite")); $this->assertEquals(3, $this->TextStatistics->syllableCount("crysler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("csaszar")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cuddeback")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cuello")); $this->assertEquals(1, $this->TextStatistics->syllableCount("cuffe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cuneiform")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cunliffe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cureton")); $this->assertEquals(4, $this->TextStatistics->syllableCount("curiale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("curnutte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cutaia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("cutesy")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cutrone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cuvelier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cxc")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cyclades")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cycling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("cyclist")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cyclopean")); $this->assertEquals(4, $this->TextStatistics->syllableCount("cytherea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dadeland")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dague")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dahlia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dahlke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dahnke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("daiichi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dalgleish")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dalia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dalke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("daloia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dalpe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dambrosia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("damewood")); $this->assertEquals(3, $this->TextStatistics->syllableCount("damien")); $this->assertEquals(4, $this->TextStatistics->syllableCount("damietta")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dandelion")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dandelions")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dandrea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dandyism")); $this->assertEquals(3, $this->TextStatistics->syllableCount("danese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dangler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dangling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("daniele")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dannemeyer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("danske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("daoud")); $this->assertEquals(1, $this->TextStatistics->syllableCount("daoust")); $this->assertEquals(3, $this->TextStatistics->syllableCount("daredevil")); $this->assertEquals(3, $this->TextStatistics->syllableCount("darien")); $this->assertEquals(1, $this->TextStatistics->syllableCount("darke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("daseke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dassler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("datapower")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dateline")); $this->assertEquals(2, $this->TextStatistics->syllableCount("datelines")); $this->assertEquals(3, $this->TextStatistics->syllableCount("davide")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dbase")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ddt")); $this->assertEquals(5, $this->TextStatistics->syllableCount("deactivated")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dealba")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deana")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deanda")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deandrade")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deandrea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("deangelis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deanna")); $this->assertEquals(4, $this->TextStatistics->syllableCount("debiase")); $this->assertEquals(2, $this->TextStatistics->syllableCount("debora")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deborde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("debruin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("debutante")); $this->assertEquals(3, $this->TextStatistics->syllableCount("debutantes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("debuted")); $this->assertEquals(4, $this->TextStatistics->syllableCount("decesare")); $this->assertEquals(2, $this->TextStatistics->syllableCount("declerque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("decorative")); $this->assertEquals(5, $this->TextStatistics->syllableCount("deemphasizing")); $this->assertEquals(1, $this->TextStatistics->syllableCount("deer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("defense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("defenseless")); $this->assertEquals(4, $this->TextStatistics->syllableCount("defiore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("defrates")); $this->assertEquals(5, $this->TextStatistics->syllableCount("degaetano")); $this->assertEquals(3, $this->TextStatistics->syllableCount("degeorge")); $this->assertEquals(4, $this->TextStatistics->syllableCount("degiacomo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("degrace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("degrave")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deguire")); $this->assertEquals(4, $this->TextStatistics->syllableCount("degutare")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dehne")); $this->assertEquals(5, $this->TextStatistics->syllableCount("deification")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deify")); $this->assertEquals(9, $this->TextStatistics->syllableCount("deinstitutionalization")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deisher")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deism")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deities")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deity")); $this->assertEquals(2, $this->TextStatistics->syllableCount("delatte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("delaurentiis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delbene")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delcine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delebarre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delfine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delgiorno")); $this->assertEquals(2, $this->TextStatistics->syllableCount("delia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deline")); $this->assertEquals(4, $this->TextStatistics->syllableCount("delineate")); $this->assertEquals(5, $this->TextStatistics->syllableCount("delineated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("delineates")); $this->assertEquals(5, $this->TextStatistics->syllableCount("delineating")); $this->assertEquals(5, $this->TextStatistics->syllableCount("delineation")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deloitte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("delorean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delores")); $this->assertEquals(4, $this->TextStatistics->syllableCount("delosreyes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("delphine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("delpriore")); $this->assertEquals(1, $this->TextStatistics->syllableCount("delre")); $this->assertEquals(4, $this->TextStatistics->syllableCount("delsignore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deltaic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deluise")); $this->assertEquals(3, $this->TextStatistics->syllableCount("demagogue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("demagogues")); $this->assertEquals(4, $this->TextStatistics->syllableCount("demarest")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dementia")); $this->assertEquals(5, $this->TextStatistics->syllableCount("democratically")); $this->assertEquals(5, $this->TextStatistics->syllableCount("demographically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("denarii")); $this->assertEquals(4, $this->TextStatistics->syllableCount("denatale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dengler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("denlinger")); $this->assertEquals(3, $this->TextStatistics->syllableCount("denouement")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dense")); $this->assertEquals(2, $this->TextStatistics->syllableCount("densely")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dente")); $this->assertEquals(7, $this->TextStatistics->syllableCount("denuclearization")); $this->assertEquals(5, $this->TextStatistics->syllableCount("denuclearized")); $this->assertEquals(8, $this->TextStatistics->syllableCount("deoxyribonucleic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dep")); $this->assertEquals(3, $this->TextStatistics->syllableCount("depace")); $this->assertEquals(4, $this->TextStatistics->syllableCount("depascale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("depasquale")); $this->assertEquals(1, $this->TextStatistics->syllableCount("deppe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("depreciable")); $this->assertEquals(4, $this->TextStatistics->syllableCount("depriest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dercole")); $this->assertEquals(4, $this->TextStatistics->syllableCount("derflinger")); $this->assertEquals(4, $this->TextStatistics->syllableCount("derosia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("derouen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("derouin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("desai")); $this->assertEquals(5, $this->TextStatistics->syllableCount("desantiago")); $this->assertEquals(2, $this->TextStatistics->syllableCount("descartes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("deschler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deserved")); $this->assertEquals(4, $this->TextStatistics->syllableCount("deservedly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deshaies")); $this->assertEquals(4, $this->TextStatistics->syllableCount("desimone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("desire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("desired")); $this->assertEquals(3, $this->TextStatistics->syllableCount("desires")); $this->assertEquals(4, $this->TextStatistics->syllableCount("desiring")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deslatte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("desperate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("desroches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dessauer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("detente")); $this->assertEquals(5, $this->TextStatistics->syllableCount("determinedly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("detore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dettore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deutschemark")); $this->assertEquals(2, $this->TextStatistics->syllableCount("deutschemarks")); $this->assertEquals(3, $this->TextStatistics->syllableCount("devere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("devilish")); $this->assertEquals(3, $this->TextStatistics->syllableCount("devillier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("devour")); $this->assertEquals(3, $this->TextStatistics->syllableCount("devoured")); $this->assertEquals(4, $this->TextStatistics->syllableCount("devouring")); $this->assertEquals(3, $this->TextStatistics->syllableCount("devours")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dewilde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dewitte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dewolfe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dhlakama")); $this->assertEquals(4, $this->TextStatistics->syllableCount("diabetes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dialogue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dialogues")); $this->assertEquals(2, $this->TextStatistics->syllableCount("diamond")); $this->assertEquals(2, $this->TextStatistics->syllableCount("diamonds")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dianne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("diaper")); $this->assertEquals(4, $this->TextStatistics->syllableCount("diarrhea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("diastole")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dibiase")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dicesare")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dichroic")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dicke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dickes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dicomed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("didion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("diego")); $this->assertEquals(2, $this->TextStatistics->syllableCount("diener")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dienst")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dierkes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dierking")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dietary")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dietetic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dieting")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dietitian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dietitians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dietl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("diets")); $this->assertEquals(1, $this->TextStatistics->syllableCount("Dieu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("diez")); $this->assertEquals(5, $this->TextStatistics->syllableCount("differentiate")); $this->assertEquals(6, $this->TextStatistics->syllableCount("differentiated")); $this->assertEquals(5, $this->TextStatistics->syllableCount("differentiates")); $this->assertEquals(6, $this->TextStatistics->syllableCount("differentiating")); $this->assertEquals(6, $this->TextStatistics->syllableCount("differentiation")); $this->assertEquals(3, $this->TextStatistics->syllableCount("differently")); $this->assertEquals(4, $this->TextStatistics->syllableCount("difiore")); $this->assertEquals(4, $this->TextStatistics->syllableCount("digiacomo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("digioia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("digiovanna")); $this->assertEquals(4, $this->TextStatistics->syllableCount("digiovanni")); $this->assertEquals(5, $this->TextStatistics->syllableCount("diguglielmo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("diianni")); $this->assertEquals(4, $this->TextStatistics->syllableCount("diiorio")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dikeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dildine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("diltiazem")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dimare")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dimichele")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dinatale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dinehart")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dingler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dinmukhamed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dinse")); $this->assertEquals(5, $this->TextStatistics->syllableCount("dionisio")); $this->assertEquals(4, $this->TextStatistics->syllableCount("diorio")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dipaola")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dipaolo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dipasquale")); $this->assertEquals(5, $this->TextStatistics->syllableCount("diplomatically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("directv")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dirkes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dirkse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("discharged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("discotheque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dIsere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("disgorged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("disgorgement")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disgruntling")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disimone")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disinterested")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dismantling")); $this->assertEquals(4, $this->TextStatistics->syllableCount("disorient")); $this->assertEquals(6, $this->TextStatistics->syllableCount("disorientation")); $this->assertEquals(5, $this->TextStatistics->syllableCount("disoriented")); $this->assertEquals(5, $this->TextStatistics->syllableCount("disorienting")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dispatched")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dispense")); $this->assertEquals(1, $this->TextStatistics->syllableCount("disque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dissuade")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dissuaded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("diverged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("divulged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dk")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dlouhy")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dlugos")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dlugosz")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dmitri")); $this->assertEquals(3, $this->TextStatistics->syllableCount("doable")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dobrzynski")); $this->assertEquals(1, $this->TextStatistics->syllableCount("doepke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("doer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("doerfler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("doerflinger")); $this->assertEquals(3, $this->TextStatistics->syllableCount("doering")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dogmatically")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dohme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dohse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("doin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dolores")); $this->assertEquals(2, $this->TextStatistics->syllableCount("domangue")); $this->assertEquals(4, $this->TextStatistics->syllableCount("domestically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("domine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("domingue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dominique")); $this->assertEquals(1, $this->TextStatistics->syllableCount("domke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("donde")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dondlinger")); $this->assertEquals(1, $this->TextStatistics->syllableCount("donze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("doonesbury")); $this->assertEquals(2, $this->TextStatistics->syllableCount("doppler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dorea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dorine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dorion")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dornier")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dorothea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dorthea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dosia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dossier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dossiers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("doubtfire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("doubtfires")); $this->assertEquals(3, $this->TextStatistics->syllableCount("douglass")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dour")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dovetail")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dovetailed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dovetails")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dower")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dowers")); $this->assertEquals(1, $this->TextStatistics->syllableCount("downe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("downes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dowse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dramatically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("drastically")); $this->assertEquals(1, $this->TextStatistics->syllableCount("drawer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("drawers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("drechsler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("dreher")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dressler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("driveway")); $this->assertEquals(2, $this->TextStatistics->syllableCount("driveways")); $this->assertEquals(1, $this->TextStatistics->syllableCount("drogue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("drouillard")); $this->assertEquals(1, $this->TextStatistics->syllableCount("drouin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("druella")); $this->assertEquals(2, $this->TextStatistics->syllableCount("druid")); $this->assertEquals(4, $this->TextStatistics->syllableCount("druidism")); $this->assertEquals(2, $this->TextStatistics->syllableCount("druids")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dsouza")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dualisms")); $this->assertEquals(1, $this->TextStatistics->syllableCount("duane")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duarte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dubilier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dubreuil")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dubuque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ducharme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duel")); $this->assertEquals(3, $this->TextStatistics->syllableCount("duelist")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duels")); $this->assertEquals(3, $this->TextStatistics->syllableCount("duesler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duets")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duey")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dufresne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duis")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dukedom")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dukeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dulcea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dulciana")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dulcinea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dullea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dumire")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duncombe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dunmire")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("duodenal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duong")); $this->assertEquals(4, $this->TextStatistics->syllableCount("duopoly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dupler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dupriest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dupuis")); $this->assertEquals(1, $this->TextStatistics->syllableCount("duque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duquesne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("duquette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("duramed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("durflinger")); $this->assertEquals(3, $this->TextStatistics->syllableCount("duvalier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("duvaliers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dwindling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dyches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("dykeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("dyslexia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("dzhirkvelov")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eagleye")); $this->assertEquals(1, $this->TextStatistics->syllableCount("earle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("earles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("easudes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eavesdrop")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eavesdropping")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eblen")); $this->assertEquals(1, $this->TextStatistics->syllableCount("eckes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eckl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eclipse")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ecologically")); $this->assertEquals(5, $this->TextStatistics->syllableCount("economically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ecstatically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ecuador")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ecuadoran")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ecuadorian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("edgecomb")); $this->assertEquals(2, $this->TextStatistics->syllableCount("edgecombe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("edgemon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("edgeways")); $this->assertEquals(2, $this->TextStatistics->syllableCount("edgewood")); $this->assertEquals(2, $this->TextStatistics->syllableCount("edgeworth")); $this->assertEquals(4, $this->TextStatistics->syllableCount("edinburgh")); $this->assertEquals(5, $this->TextStatistics->syllableCount("edizione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("edouard")); $this->assertEquals(3, $this->TextStatistics->syllableCount("edrea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("edrington")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eduard")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eduardo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("effler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("egoism")); $this->assertEquals(3, $this->TextStatistics->syllableCount("egregious")); $this->assertEquals(4, $this->TextStatistics->syllableCount("egregiously")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ehle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ehlke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ehrke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eichler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eiermann")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eifler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eightieth")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eiichi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eiseman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eisemann")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ekkehard")); $this->assertEquals(3, $this->TextStatistics->syllableCount("elaborate")); $this->assertEquals(4, $this->TextStatistics->syllableCount("elaborately")); $this->assertEquals(2, $this->TextStatistics->syllableCount("elapse")); $this->assertEquals(1, $this->TextStatistics->syllableCount("elbe")); $this->assertEquals(5, $this->TextStatistics->syllableCount("electricite")); $this->assertEquals(3, $this->TextStatistics->syllableCount("electrique")); $this->assertEquals(4, $this->TextStatistics->syllableCount("elementary")); $this->assertEquals(5, $this->TextStatistics->syllableCount("eleonore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("eletr")); $this->assertEquals(4, $this->TextStatistics->syllableCount("elinore")); $this->assertEquals(1, $this->TextStatistics->syllableCount("elkes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ellerbe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ellesmere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ellipse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ellithorpe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("elmes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("else")); $this->assertEquals(3, $this->TextStatistics->syllableCount("elsea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("elsevier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("elsewhere")); $this->assertEquals(4, $this->TextStatistics->syllableCount("elysia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("emanuel")); $this->assertEquals(5, $this->TextStatistics->syllableCount("emanuele")); $this->assertEquals(2, $this->TextStatistics->syllableCount("embler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("embolisms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("embryo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("embryonic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("embryos")); $this->assertEquals(1, $this->TextStatistics->syllableCount("emde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("emerald")); $this->assertEquals(2, $this->TextStatistics->syllableCount("emeralds")); $this->assertEquals(2, $this->TextStatistics->syllableCount("emerged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("eminase")); $this->assertEquals(4, $this->TextStatistics->syllableCount("emmaline")); $this->assertEquals(4, $this->TextStatistics->syllableCount("emmanuel")); $this->assertEquals(4, $this->TextStatistics->syllableCount("emotionally")); $this->assertEquals(4, $this->TextStatistics->syllableCount("emphatically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("emphysema")); $this->assertEquals(3, $this->TextStatistics->syllableCount("empire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("empires")); $this->assertEquals(3, $this->TextStatistics->syllableCount("emslie")); $this->assertEquals(3, $this->TextStatistics->syllableCount("emuil")); $this->assertEquals(5, $this->TextStatistics->syllableCount("encarnacion")); $this->assertEquals(4, $this->TextStatistics->syllableCount("encircling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("encroaches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ende")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enea")); $this->assertEquals(5, $this->TextStatistics->syllableCount("energetically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("engelke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("engeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("engler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("enholme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("enke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("enlarged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enlargement")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enlargements")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ennea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ennui")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enriches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("enslen")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ensminger")); $this->assertEquals(5, $this->TextStatistics->syllableCount("enthusiasm")); $this->assertEquals(5, $this->TextStatistics->syllableCount("enthusiasms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("entire")); $this->assertEquals(4, $this->TextStatistics->syllableCount("entirely")); $this->assertEquals(4, $this->TextStatistics->syllableCount("entitling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("entrenches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("entringer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("entsminger")); $this->assertEquals(8, $this->TextStatistics->syllableCount("environmentalism")); $this->assertEquals(5, $this->TextStatistics->syllableCount("epicurean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("epilogue")); $this->assertEquals(4, $this->TextStatistics->syllableCount("epitome")); $this->assertEquals(1, $this->TextStatistics->syllableCount("eppes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eppler")); $this->assertEquals(5, $this->TextStatistics->syllableCount("equiangular")); $this->assertEquals(3, $this->TextStatistics->syllableCount("equity")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eranthe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("erbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("erbes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ercole")); $this->assertEquals(3, $this->TextStatistics->syllableCount("erion")); $this->assertEquals(4, $this->TextStatistics->syllableCount("eritrea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("eritrean")); $this->assertEquals(4, $this->TextStatistics->syllableCount("erratically")); $this->assertEquals(1, $this->TextStatistics->syllableCount("erte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ertl")); $this->assertEquals(5, $this->TextStatistics->syllableCount("erythropoietin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("esler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("eslinger")); $this->assertEquals(1, $this->TextStatistics->syllableCount("esme")); $this->assertEquals(3, $this->TextStatistics->syllableCount("espalier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("espe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("especially")); $this->assertEquals(2, $this->TextStatistics->syllableCount("esquer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("est")); $this->assertEquals(3, $this->TextStatistics->syllableCount("esteves")); $this->assertEquals(4, $this->TextStatistics->syllableCount("etc")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ethnically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ethyol")); $this->assertEquals(3, $this->TextStatistics->syllableCount("etiquette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("euan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("euchred")); $this->assertEquals(3, $this->TextStatistics->syllableCount("euclea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("eudosia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("euphemisms")); $this->assertEquals(5, $this->TextStatistics->syllableCount("euphemistically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("euphrates")); $this->assertEquals(5, $this->TextStatistics->syllableCount("euromissiles")); $this->assertEquals(5, $this->TextStatistics->syllableCount("euromobiliare")); $this->assertEquals(4, $this->TextStatistics->syllableCount("european")); $this->assertEquals(4, $this->TextStatistics->syllableCount("europeans")); $this->assertEquals(3, $this->TextStatistics->syllableCount("europewide")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eveland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("evening")); $this->assertEquals(2, $this->TextStatistics->syllableCount("evenings")); $this->assertEquals(4, $this->TextStatistics->syllableCount("everybody")); $this->assertEquals(3, $this->TextStatistics->syllableCount("everyday")); $this->assertEquals(3, $this->TextStatistics->syllableCount("everyman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("everything")); $this->assertEquals(3, $this->TextStatistics->syllableCount("everytime")); $this->assertEquals(3, $this->TextStatistics->syllableCount("everywhere")); $this->assertEquals(6, $this->TextStatistics->syllableCount("evidentiary")); $this->assertEquals(3, $this->TextStatistics->syllableCount("exchequer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("expanse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("expeditious")); $this->assertEquals(5, $this->TextStatistics->syllableCount("expeditiously")); $this->assertEquals(2, $this->TextStatistics->syllableCount("expense")); $this->assertEquals(4, $this->TextStatistics->syllableCount("experience")); $this->assertEquals(4, $this->TextStatistics->syllableCount("experienced")); $this->assertEquals(5, $this->TextStatistics->syllableCount("experiences")); $this->assertEquals(5, $this->TextStatistics->syllableCount("experiencing")); $this->assertEquals(3, $this->TextStatistics->syllableCount("expires")); $this->assertEquals(2, $this->TextStatistics->syllableCount("eyepiece")); $this->assertEquals(2, $this->TextStatistics->syllableCount("facedown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("facelift")); $this->assertEquals(4, $this->TextStatistics->syllableCount("facemire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("facetious")); $this->assertEquals(4, $this->TextStatistics->syllableCount("facetiously")); $this->assertEquals(4, $this->TextStatistics->syllableCount("faciane")); $this->assertEquals(4, $this->TextStatistics->syllableCount("facsimile")); $this->assertEquals(4, $this->TextStatistics->syllableCount("facsimiles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fagundes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fahnestock")); $this->assertEquals(3, $this->TextStatistics->syllableCount("faiola")); $this->assertEquals(2, $this->TextStatistics->syllableCount("faist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("falcone")); $this->assertEquals(1, $this->TextStatistics->syllableCount("falke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("false")); $this->assertEquals(2, $this->TextStatistics->syllableCount("falsehood")); $this->assertEquals(2, $this->TextStatistics->syllableCount("falsehoods")); $this->assertEquals(2, $this->TextStatistics->syllableCount("falsely")); $this->assertEquals(3, $this->TextStatistics->syllableCount("falzone")); $this->assertEquals(5, $this->TextStatistics->syllableCount("famiglietti")); $this->assertEquals(3, $this->TextStatistics->syllableCount("familial")); $this->assertEquals(3, $this->TextStatistics->syllableCount("familiar")); $this->assertEquals(5, $this->TextStatistics->syllableCount("familiarity")); $this->assertEquals(4, $this->TextStatistics->syllableCount("familiarize")); $this->assertEquals(4, $this->TextStatistics->syllableCount("familiarized")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fansler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fantastically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fanueil")); $this->assertEquals(3, $this->TextStatistics->syllableCount("farace")); $this->assertEquals(4, $this->TextStatistics->syllableCount("faraone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("farese")); $this->assertEquals(2, $this->TextStatistics->syllableCount("farewell")); $this->assertEquals(2, $this->TextStatistics->syllableCount("farewells")); $this->assertEquals(2, $this->TextStatistics->syllableCount("farfetched")); $this->assertEquals(2, $this->TextStatistics->syllableCount("farquhar")); $this->assertEquals(3, $this->TextStatistics->syllableCount("farruggia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("farrugia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fasone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fassler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fatigue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fatigued")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fatigues")); $this->assertEquals(3, $this->TextStatistics->syllableCount("faubion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("favale")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fawkes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fayetteville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("FDIC")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fealty")); $this->assertEquals(4, $this->TextStatistics->syllableCount("feb")); $this->assertEquals(1, $this->TextStatistics->syllableCount("felde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("felske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("feltes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fencl")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fenske")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ferraioli")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ferre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ferriss")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ferrofluidics")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ferrone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fesler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fessler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fiance")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ficke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fickes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fictitious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fidelia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fidler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fieros")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fiers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fiery")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fiesta")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fiftieth")); $this->assertEquals(3, $this->TextStatistics->syllableCount("figler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("figueira")); $this->assertEquals(4, $this->TextStatistics->syllableCount("figueiredo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("figurehead")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fildes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("filenet")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fillingame")); $this->assertEquals(3, $this->TextStatistics->syllableCount("finale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("financier")); $this->assertEquals(5, $this->TextStatistics->syllableCount("financiera")); $this->assertEquals(5, $this->TextStatistics->syllableCount("financiero")); $this->assertEquals(3, $this->TextStatistics->syllableCount("financiers")); $this->assertEquals(6, $this->TextStatistics->syllableCount("finanziaria")); $this->assertEquals(2, $this->TextStatistics->syllableCount("finarte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("finches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fincke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("findling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fineberg")); $this->assertEquals(2, $this->TextStatistics->syllableCount("finefrock")); $this->assertEquals(2, $this->TextStatistics->syllableCount("finegold")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fineman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("finestone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("finevest")); $this->assertEquals(1, $this->TextStatistics->syllableCount("finke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("finklea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fiore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("firearm")); $this->assertEquals(3, $this->TextStatistics->syllableCount("firearms")); $this->assertEquals(2, $this->TextStatistics->syllableCount("firebaugh")); $this->assertEquals(2, $this->TextStatistics->syllableCount("firebombed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("firebombs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fired")); $this->assertEquals(2, $this->TextStatistics->syllableCount("firefight")); $this->assertEquals(3, $this->TextStatistics->syllableCount("firefighter")); $this->assertEquals(3, $this->TextStatistics->syllableCount("firefighting")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fireman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("firemen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("firepower")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fires")); $this->assertEquals(2, $this->TextStatistics->syllableCount("firestone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("firestorm")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fireworks")); $this->assertEquals(2, $this->TextStatistics->syllableCount("firstier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fischl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fischler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fisler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fitzhenry")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fitzwilliam")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fivecoat")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fivefold")); $this->assertEquals(2, $this->TextStatistics->syllableCount("flaharty")); $this->assertEquals(2, $this->TextStatistics->syllableCount("flaherty")); $this->assertEquals(3, $this->TextStatistics->syllableCount("flamemaster")); $this->assertEquals(2, $this->TextStatistics->syllableCount("flavr")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fleer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("flightsafety")); $this->assertEquals(3, $this->TextStatistics->syllableCount("flirtatious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("florea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("flores")); $this->assertEquals(3, $this->TextStatistics->syllableCount("florine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("flour")); $this->assertEquals(2, $this->TextStatistics->syllableCount("flours")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fluid")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fluidity")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fluids")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fluitt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fluor")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fogler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("foie")); $this->assertEquals(2, $this->TextStatistics->syllableCount("foiles")); $this->assertEquals(1, $this->TextStatistics->syllableCount("folkes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("folliard")); $this->assertEquals(1, $this->TextStatistics->syllableCount("folse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("foncier")); $this->assertEquals(5, $this->TextStatistics->syllableCount("fondiaria")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fondren")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fonte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("forbes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forcefulness")); $this->assertEquals(1, $this->TextStatistics->syllableCount("forde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forensic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forensics")); $this->assertEquals(2, $this->TextStatistics->syllableCount("forest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forested")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forester")); $this->assertEquals(3, $this->TextStatistics->syllableCount("foresters")); $this->assertEquals(3, $this->TextStatistics->syllableCount("forestry")); $this->assertEquals(2, $this->TextStatistics->syllableCount("forests")); $this->assertEquals(2, $this->TextStatistics->syllableCount("forex")); $this->assertEquals(1, $this->TextStatistics->syllableCount("forgue")); $this->assertEquals(4, $this->TextStatistics->syllableCount("formulaic")); $this->assertEquals(2, $this->TextStatistics->syllableCount("forquer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fortieth")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fortuitous")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fosler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("foulke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("foulkes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("foward")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fowkes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fowlkes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("foxmeyer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fractious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fractiousness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fragale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fraioli")); $this->assertEquals(2, $this->TextStatistics->syllableCount("framework")); $this->assertEquals(3, $this->TextStatistics->syllableCount("francese")); $this->assertEquals(1, $this->TextStatistics->syllableCount("francke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("francoeur")); $this->assertEquals(1, $this->TextStatistics->syllableCount("franke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("frankincense")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frankl")); $this->assertEquals(1, $this->TextStatistics->syllableCount("franze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("franzese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("franzone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frashier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fratzke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frazier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("freda")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frederic")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frederick")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fredericks")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fredericksburg")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fredette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("freest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("freia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fricke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frie")); $this->assertEquals(2, $this->TextStatistics->syllableCount("friedl")); $this->assertEquals(1, $this->TextStatistics->syllableCount("friis")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fritze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fronde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frontier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("frontiers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fruin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fruition")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fruity")); $this->assertEquals(1, $this->TextStatistics->syllableCount("frunze")); $this->assertEquals(2, $this->TextStatistics->syllableCount("FSLIC")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fuel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fueled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fuelled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("fuels")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fuer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fugue")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fugues")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fukui")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fukuoka")); $this->assertEquals(4, $this->TextStatistics->syllableCount("fullilove")); $this->assertEquals(2, $this->TextStatistics->syllableCount("funches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("funderburke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("funke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fuoco")); $this->assertEquals(3, $this->TextStatistics->syllableCount("fuselier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fyffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("fyffes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gabbroic")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gabehart")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gabele")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gaboriault")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gabriel")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gabriela")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gabriele")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gabrys")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gaffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gaffes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gaglione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gaia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("galatea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("galea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("galentine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("galesburg")); $this->assertEquals(3, $this->TextStatistics->syllableCount("galiena")); $this->assertEquals(4, $this->TextStatistics->syllableCount("galilean")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gallentine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("galyon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gambale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gambler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gamblers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gamesmanship")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gamunde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gangl")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ganske")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gaona")); $this->assertEquals(1, $this->TextStatistics->syllableCount("garbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("garde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gardenia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gardenias")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gardiner")); $this->assertEquals(2, $this->TextStatistics->syllableCount("garoutte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("garske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gartzke")); $this->assertEquals(6, $this->TextStatistics->syllableCount("gastrointestinal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gatekeeper")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gatekeepers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gateway")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gateways")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gatewood")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gatx")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gatzke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gauerke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gaulke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gawne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gdansk")); $this->assertEquals(4, $this->TextStatistics->syllableCount("geagea")); $this->assertEquals(1, $this->TextStatistics->syllableCount("geerdes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gehres")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gehrke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("geissler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gelasia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gendarme")); $this->assertEquals(5, $this->TextStatistics->syllableCount("genealogy")); $this->assertEquals(4, $this->TextStatistics->syllableCount("generales")); $this->assertEquals(4, $this->TextStatistics->syllableCount("generically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("genetically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gengler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("genial")); $this->assertEquals(4, $this->TextStatistics->syllableCount("genitalia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("genius")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gensia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("genske")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gensler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gentlest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("genuine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("genuinely")); $this->assertEquals(2, $this->TextStatistics->syllableCount("georges")); $this->assertEquals(2, $this->TextStatistics->syllableCount("georgetown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("georgette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("georgia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("georgian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("georgians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("georgiou")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gerace")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gerdeman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gerdes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gericke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gerke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("germe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gertler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("geschke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gfeller")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ghanaian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ghanaians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giacco")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giacinta")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giacobbe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giacomelli")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giacomini")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giacomo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giacone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giaimo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gialanella")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giambalvo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giambra")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giammarco")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giammarino")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giampa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giampaolo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giampietro")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giancola")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gianelli")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gianfrancesco")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giangrande")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gianino")); $this->assertEquals(5, $this->TextStatistics->syllableCount("giannattasio")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giannelli")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giannetti")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giannetto")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gianni")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giannini")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giannola")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giannotti")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gianotti")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giaquinto")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giardina")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giardini")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giardino")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giarratano")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giarrusso")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gierke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giesecke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giesler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giggly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giguere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gilberte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gilbertine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gilchrest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gilcrest")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gilkes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gioia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giordani")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giordano")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giorgi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giorgia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giovanelli")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giovanetti")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giovannetti")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giovannini")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giovannoni")); $this->assertEquals(3, $this->TextStatistics->syllableCount("giovenco")); $this->assertEquals(4, $this->TextStatistics->syllableCount("giovinazzo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giraffe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("giraffes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("girdler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("girouard")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gisler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gittler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("givebacks")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gjerde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glacier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glaciers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glazebrook")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glenfed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glidewell")); $this->assertEquals(1, $this->TextStatistics->syllableCount("glimpse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gloucester")); $this->assertEquals(2, $this->TextStatistics->syllableCount("glyndebourne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goates")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gocke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("goecke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("goedde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goedecke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("goemon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("goering")); $this->assertEquals(1, $this->TextStatistics->syllableCount("goerke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("goette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("goetze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("goewey")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gohlke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("golde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("goldfinches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goleman")); $this->assertEquals(5, $this->TextStatistics->syllableCount("golembiewski")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gomes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gondolier")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gonorrhea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gonyer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gonzales")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goosefish")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goosefoot")); $this->assertEquals(2, $this->TextStatistics->syllableCount("goracke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("Gordievsky")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gottesman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gouin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("govea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("govpx")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grabbe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("graceland")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grahams")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grande")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grapefruit")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grapefruits")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grapeshot")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grapevine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grapevines")); $this->assertEquals(3, $this->TextStatistics->syllableCount("graphically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("grassia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gratuities")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gratuitous")); $this->assertEquals(5, $this->TextStatistics->syllableCount("gratuitously")); $this->assertEquals(1, $this->TextStatistics->syllableCount("graue")); $this->assertEquals(1, $this->TextStatistics->syllableCount("graunke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("graveline")); $this->assertEquals(5, $this->TextStatistics->syllableCount("gravitationally")); $this->assertEquals(2, $this->TextStatistics->syllableCount("greasewood")); $this->assertEquals(3, $this->TextStatistics->syllableCount("greeniaus")); $this->assertEquals(1, $this->TextStatistics->syllableCount("greer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("greinke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("greunke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("griesa")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grinde")); $this->assertEquals(4, $this->TextStatistics->syllableCount("grismer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grobler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("groene")); $this->assertEquals(3, $this->TextStatistics->syllableCount("groening")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grolier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grosvenor")); $this->assertEquals(2, $this->TextStatistics->syllableCount("groveman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gruel")); $this->assertEquals(3, $this->TextStatistics->syllableCount("grueling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gruet")); $this->assertEquals(1, $this->TextStatistics->syllableCount("gruhlke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gruis")); $this->assertEquals(1, $this->TextStatistics->syllableCount("grulke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grunebaum")); $this->assertEquals(3, $this->TextStatistics->syllableCount("grzelak")); $this->assertEquals(4, $this->TextStatistics->syllableCount("grzesiak")); $this->assertEquals(5, $this->TextStatistics->syllableCount("grzeskowiak")); $this->assertEquals(2, $this->TextStatistics->syllableCount("grzyb")); $this->assertEquals(4, $this->TextStatistics->syllableCount("grzybowski")); $this->assertEquals(3, $this->TextStatistics->syllableCount("grzywacz")); $this->assertEquals(4, $this->TextStatistics->syllableCount("grzywinski")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gschwind")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gsell")); $this->assertEquals(2, $this->TextStatistics->syllableCount("gtech")); $this->assertEquals(5, $this->TextStatistics->syllableCount("guadarrama")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gucciardo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guenette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("guerre")); $this->assertEquals(5, $this->TextStatistics->syllableCount("guglielmetti")); $this->assertEquals(4, $this->TextStatistics->syllableCount("guglielmi")); $this->assertEquals(4, $this->TextStatistics->syllableCount("guglielmo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("guiana")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guidebook")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guidebooks")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guideline")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guidelines")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guidepost")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guideposts")); $this->assertEquals(3, $this->TextStatistics->syllableCount("guidone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("guidry")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guillotte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guinier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guisewite")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gundry")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gunfire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gurgling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gurion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gurtler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guseman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gusler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("gustave")); $this->assertEquals(2, $this->TextStatistics->syllableCount("guzzler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("gymnasia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("haacke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("habeas")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hacienda")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hacke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hackl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hackler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hades")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hadler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("haering")); $this->assertEquals(2, $this->TextStatistics->syllableCount("haeussler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hafeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hageman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hagemann")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hagewood")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hague")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hahne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("haist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hajime")); $this->assertEquals(3, $this->TextStatistics->syllableCount("halcyon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("halcyone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("haldeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hallbauer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("halteman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hamblen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hamler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hampe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hamtramck")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hanemann")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hanke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hankes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hanneman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hannemann")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hanseatic")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hapeman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("happe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("haque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("harangue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("harangued")); $this->assertEquals(2, $this->TextStatistics->syllableCount("harangues")); $this->assertEquals(3, $this->TextStatistics->syllableCount("harare")); $this->assertEquals(4, $this->TextStatistics->syllableCount("harclerode")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hardebeck")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hardeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hardwicke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("harebrained")); $this->assertEquals(2, $this->TextStatistics->syllableCount("harewood")); $this->assertEquals(1, $this->TextStatistics->syllableCount("harke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("harmes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("harpe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("harre")); $this->assertEquals(1, $this->TextStatistics->syllableCount("harte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hartl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("haruo")); $this->assertEquals(1, $this->TextStatistics->syllableCount("haschke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("haseman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hasler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hass")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hassler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hatheway")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hatler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("haueter")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hausler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("havelock")); $this->assertEquals(2, $this->TextStatistics->syllableCount("haveman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hawaii")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hawaiian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hawaiians")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hawke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hawkes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hawkiness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("haydn")); $this->assertEquals(2, $this->TextStatistics->syllableCount("haynesworth")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hbox")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hces")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hebrides")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hedgecock")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hedgehog")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hedgehogs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hedgepath")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heffler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hegeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hehmeyer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heideman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heidemann")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heidler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heigl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heikes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heileman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heindl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heinecke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heineman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heinemann")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heinicke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("heinke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heinl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heinlen")); $this->assertEquals(1, $this->TextStatistics->syllableCount("heintze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("heinze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heishman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heisler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("helbling")); $this->assertEquals(5, $this->TextStatistics->syllableCount("helionetics")); $this->assertEquals(1, $this->TextStatistics->syllableCount("helke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("helme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("helmes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("helmke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hempfling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("henceforth")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hendren")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hendrie")); $this->assertEquals(1, $this->TextStatistics->syllableCount("henke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("henkes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("henneberger")); $this->assertEquals(2, $this->TextStatistics->syllableCount("henneman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("henrie")); $this->assertEquals(2, $this->TextStatistics->syllableCount("henrique")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hensler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("henze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("heppe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("heppler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("herculean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hercules")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hereby")); $this->assertEquals(2, $this->TextStatistics->syllableCount("herendeen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heretofore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("herewith")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hernandes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heroic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heroics")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heroin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heroine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heroines")); $this->assertEquals(4, $this->TextStatistics->syllableCount("heroism")); $this->assertEquals(3, $this->TextStatistics->syllableCount("heroized")); $this->assertEquals(1, $this->TextStatistics->syllableCount("herre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hertzler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hesler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hessler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hestia")); $this->assertEquals(7, $this->TextStatistics->syllableCount("heterogeneity")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hettler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hfdf")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hgh")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hialeah")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hibbler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hideaki")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hidebound")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hideout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hideouts")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hierarchy")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hiers")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hilde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hildegarde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hildegardes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hileman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hilemon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hilgeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hilliard")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hilmes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hinchcliffe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hinchliffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hinde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hindes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hinduism")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hineman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hintze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hinze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hippe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hippler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hirai")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hire")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hired")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hires")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hiroaki")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hirose")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hisao")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hitzeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("HIV")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hjelm")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hjort")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hobbyist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hobbyists")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hochstedler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hochstetler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hodde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hodgepodge")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hoefler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hoefling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hoehne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoene")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoeveler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoey")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hogue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("holcombe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("holde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("holdeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("holdren")); $this->assertEquals(2, $this->TextStatistics->syllableCount("holeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("holleman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("holme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("holmes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("holste")); $this->assertEquals(1, $this->TextStatistics->syllableCount("holte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("holyoak")); $this->assertEquals(3, $this->TextStatistics->syllableCount("holyoke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homebuilder")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homebuilders")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homebuilding")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homebuyers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homecare")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homeclub")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homecoming")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homegrown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homeland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homelands")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homelessness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homelike")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homemade")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homemaker")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homemakers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homemaking")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homeporting")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homesick")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homesickness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homesley")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homespun")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homestake")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homestate")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homestead")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homesteaded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homestretch")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hometown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homeward")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homewood")); $this->assertEquals(2, $this->TextStatistics->syllableCount("homework")); $this->assertEquals(3, $this->TextStatistics->syllableCount("homeworkers")); $this->assertEquals(6, $this->TextStatistics->syllableCount("homogeneity")); $this->assertEquals(3, $this->TextStatistics->syllableCount("honea")); $this->assertEquals(1, $this->TextStatistics->syllableCount("honse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoobler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoosier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hoosiers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hopefuls")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hopelessness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hopewell")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hopke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hoppe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hoppes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("horatio")); $this->assertEquals(3, $this->TextStatistics->syllableCount("horatius")); $this->assertEquals(1, $this->TextStatistics->syllableCount("horde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hordes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horehound")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hornblende")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horseback")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horseflesh")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horsehead")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horseman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("horsemanship")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horsemen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horseplay")); $this->assertEquals(3, $this->TextStatistics->syllableCount("horsepower")); $this->assertEquals(3, $this->TextStatistics->syllableCount("horseradish")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horseshoe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horseshoes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("horsetails")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hosea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hosler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hosseini")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hostetler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hostutler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hotelier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hoteliers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hottelet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hotwired")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hotze")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hour")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hourglass")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hours")); $this->assertEquals(2, $this->TextStatistics->syllableCount("houseboat")); $this->assertEquals(3, $this->TextStatistics->syllableCount("housebroken")); $this->assertEquals(3, $this->TextStatistics->syllableCount("housecleaning")); $this->assertEquals(2, $this->TextStatistics->syllableCount("household")); $this->assertEquals(3, $this->TextStatistics->syllableCount("householder")); $this->assertEquals(3, $this->TextStatistics->syllableCount("householders")); $this->assertEquals(2, $this->TextStatistics->syllableCount("households")); $this->assertEquals(3, $this->TextStatistics->syllableCount("housekeeper")); $this->assertEquals(3, $this->TextStatistics->syllableCount("housekeepers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("housekeeping")); $this->assertEquals(2, $this->TextStatistics->syllableCount("houseknecht")); $this->assertEquals(2, $this->TextStatistics->syllableCount("houseman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("houseware")); $this->assertEquals(2, $this->TextStatistics->syllableCount("housewares")); $this->assertEquals(2, $this->TextStatistics->syllableCount("housewife")); $this->assertEquals(2, $this->TextStatistics->syllableCount("housewives")); $this->assertEquals(2, $this->TextStatistics->syllableCount("housework")); $this->assertEquals(2, $this->TextStatistics->syllableCount("houseworth")); $this->assertEquals(2, $this->TextStatistics->syllableCount("housewright")); $this->assertEquals(2, $this->TextStatistics->syllableCount("houy")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hovde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("howse")); $this->assertEquals(1, $this->TextStatistics->syllableCount("howze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hrawi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hrdlicka")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hrncir")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hrubik")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hsiao")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hsieh")); $this->assertEquals(3, $this->TextStatistics->syllableCount("huachuca")); $this->assertEquals(3, $this->TextStatistics->syllableCount("huallaga")); $this->assertEquals(1, $this->TextStatistics->syllableCount("huan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huaneng")); $this->assertEquals(1, $this->TextStatistics->syllableCount("huang")); $this->assertEquals(1, $this->TextStatistics->syllableCount("huard")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hucke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hudler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("huetta")); $this->assertEquals(1, $this->TextStatistics->syllableCount("huette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huey")); $this->assertEquals(4, $this->TextStatistics->syllableCount("huffstetler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("huffstutler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hufstedler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hufstetler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huggler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hui")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huibregtse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huish")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hulme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hulse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("humblest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("humfry")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huml")); $this->assertEquals(3, $this->TextStatistics->syllableCount("humphries")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hunches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hunke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("hunte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huot")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hurdler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hurdling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("huseman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hustler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hustlers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hustling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hyades")); $this->assertEquals(5, $this->TextStatistics->syllableCount("hydroelectric")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hydropower")); $this->assertEquals(3, $this->TextStatistics->syllableCount("hygeia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hyperbole")); $this->assertEquals(5, $this->TextStatistics->syllableCount("hyperborean")); $this->assertEquals(5, $this->TextStatistics->syllableCount("hypothetically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("hysterically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("hyun")); $this->assertEquals(4, $this->TextStatistics->syllableCount("iafrate")); $this->assertEquals(2, $this->TextStatistics->syllableCount("iain")); $this->assertEquals(5, $this->TextStatistics->syllableCount("iannaccone")); $this->assertEquals(5, $this->TextStatistics->syllableCount("iannacone")); $this->assertEquals(4, $this->TextStatistics->syllableCount("iannone")); $this->assertEquals(5, $this->TextStatistics->syllableCount("iavarone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ibn")); $this->assertEquals(2, $this->TextStatistics->syllableCount("iceberg")); $this->assertEquals(2, $this->TextStatistics->syllableCount("icebergs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("icebox")); $this->assertEquals(3, $this->TextStatistics->syllableCount("icebreaker")); $this->assertEquals(3, $this->TextStatistics->syllableCount("icebreakers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("iceland")); $this->assertEquals(3, $this->TextStatistics->syllableCount("icelandair")); $this->assertEquals(3, $this->TextStatistics->syllableCount("icelandic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("iceskating")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ickes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("idalia")); $this->assertEquals(5, $this->TextStatistics->syllableCount("idealistic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("idealized")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ideas")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ideologist")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ideology")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ideonomy")); $this->assertEquals(5, $this->TextStatistics->syllableCount("idiotically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("idler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("idling")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ierardi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("iezzi")); $this->assertEquals(4, $this->TextStatistics->syllableCount("iglesia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ignatius")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ihde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ihrke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("iiams")); $this->assertEquals(2, $this->TextStatistics->syllableCount("iida")); $this->assertEquals(2, $this->TextStatistics->syllableCount("iie")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ijames")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ikea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ileana")); $this->assertEquals(4, $this->TextStatistics->syllableCount("iliescu")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ilse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("imageries")); $this->assertEquals(3, $this->TextStatistics->syllableCount("imagery")); $this->assertEquals(3, $this->TextStatistics->syllableCount("imbroglio")); $this->assertEquals(3, $this->TextStatistics->syllableCount("imm")); $this->assertEquals(2, $this->TextStatistics->syllableCount("immense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("immensely")); $this->assertEquals(3, $this->TextStatistics->syllableCount("immunetech")); $this->assertEquals(6, $this->TextStatistics->syllableCount("impartiality")); $this->assertEquals(5, $this->TextStatistics->syllableCount("imperiale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("impetuous")); $this->assertEquals(3, $this->TextStatistics->syllableCount("impoverish")); $this->assertEquals(3, $this->TextStatistics->syllableCount("impoverished")); $this->assertEquals(4, $this->TextStatistics->syllableCount("impoverishes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("impoverishment")); $this->assertEquals(2, $this->TextStatistics->syllableCount("impulse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("imrie")); $this->assertEquals(5, $this->TextStatistics->syllableCount("inalienable")); $this->assertEquals(2, $this->TextStatistics->syllableCount("incense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("incestuous")); $this->assertEquals(2, $this->TextStatistics->syllableCount("inches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("incipient")); $this->assertEquals(4, $this->TextStatistics->syllableCount("inconspicuous")); $this->assertEquals(6, $this->TextStatistics->syllableCount("incoordination")); $this->assertEquals(4, $this->TextStatistics->syllableCount("incorvaia")); $this->assertEquals(5, $this->TextStatistics->syllableCount("indianians")); $this->assertEquals(3, $this->TextStatistics->syllableCount("indifferent")); $this->assertEquals(4, $this->TextStatistics->syllableCount("indosuez")); $this->assertEquals(2, $this->TextStatistics->syllableCount("indulged")); $this->assertEquals(5, $this->TextStatistics->syllableCount("industriale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("inequity")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ines")); $this->assertEquals(5, $this->TextStatistics->syllableCount("inexperience")); $this->assertEquals(5, $this->TextStatistics->syllableCount("inexperienced")); $this->assertEquals(3, $this->TextStatistics->syllableCount("infectious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ingenious")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ingeniously")); $this->assertEquals(3, $this->TextStatistics->syllableCount("inglish")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ingratiate")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ingratiating")); $this->assertEquals(4, $this->TextStatistics->syllableCount("initiate")); $this->assertEquals(5, $this->TextStatistics->syllableCount("initiated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("initiates")); $this->assertEquals(5, $this->TextStatistics->syllableCount("initiating")); $this->assertEquals(5, $this->TextStatistics->syllableCount("initiation")); $this->assertEquals(5, $this->TextStatistics->syllableCount("initiator")); $this->assertEquals(5, $this->TextStatistics->syllableCount("initiators")); $this->assertEquals(7, $this->TextStatistics->syllableCount("inmobiliaria")); $this->assertEquals(3, $this->TextStatistics->syllableCount("inouye")); $this->assertEquals(3, $this->TextStatistics->syllableCount("inquired")); $this->assertEquals(3, $this->TextStatistics->syllableCount("inquires")); $this->assertEquals(4, $this->TextStatistics->syllableCount("inquiries")); $this->assertEquals(4, $this->TextStatistics->syllableCount("inquiring")); $this->assertEquals(3, $this->TextStatistics->syllableCount("inscore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("inspired")); $this->assertEquals(6, $this->TextStatistics->syllableCount("institucional")); $this->assertEquals(3, $this->TextStatistics->syllableCount("intaglio")); $this->assertEquals(6, $this->TextStatistics->syllableCount("intelligentsia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("intense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("intensely")); $this->assertEquals(5, $this->TextStatistics->syllableCount("intercollegiate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("interdictes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("interest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("interested")); $this->assertEquals(3, $this->TextStatistics->syllableCount("interesting")); $this->assertEquals(2, $this->TextStatistics->syllableCount("interests")); $this->assertEquals(5, $this->TextStatistics->syllableCount("intermingling")); $this->assertEquals(6, $this->TextStatistics->syllableCount("internationale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("intrigue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("intrigued")); $this->assertEquals(2, $this->TextStatistics->syllableCount("intrigues")); $this->assertEquals(3, $this->TextStatistics->syllableCount("intuit")); $this->assertEquals(4, $this->TextStatistics->syllableCount("intuition")); $this->assertEquals(4, $this->TextStatistics->syllableCount("intuitive")); $this->assertEquals(5, $this->TextStatistics->syllableCount("intuitively")); $this->assertEquals(4, $this->TextStatistics->syllableCount("invaluable")); $this->assertEquals(3, $this->TextStatistics->syllableCount("iole")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ione")); $this->assertEquals(4, $this->TextStatistics->syllableCount("iorio")); $this->assertEquals(3, $this->TextStatistics->syllableCount("iou")); $this->assertEquals(4, $this->TextStatistics->syllableCount("iovine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ironically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ironton")); $this->assertEquals(3, $this->TextStatistics->syllableCount("iroquois")); $this->assertEquals(4, $this->TextStatistics->syllableCount("isadore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("isaiah")); $this->assertEquals(3, $this->TextStatistics->syllableCount("isautier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("iseman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("isms")); $this->assertEquals(6, $this->TextStatistics->syllableCount("isoelectronic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("isosceles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("israel")); $this->assertEquals(3, $this->TextStatistics->syllableCount("italian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("italianate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("italians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("itll")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ixion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("izquierdo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("izvestia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jacinthe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("jacobean")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jacque")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jacques")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jacquie")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jaenicke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jahnke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jaime")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jaimes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jakeway")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jameson")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jamestown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jamesway")); $this->assertEquals(2, $this->TextStatistics->syllableCount("janeway")); $this->assertEquals(2, $this->TextStatistics->syllableCount("janicke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("janke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jaques")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jared")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jayme")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jaymes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jeers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jefferies")); $this->assertEquals(4, $this->TextStatistics->syllableCount("jeopardizes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jerboas")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jerde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jere")); $this->assertEquals(4, $this->TextStatistics->syllableCount("jeroboam")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jerrome")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jeschke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jesmer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jesuit")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jesuits")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jewkes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jiang")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jiangsu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jiawen")); $this->assertEquals(4, $this->TextStatistics->syllableCount("jingoism")); $this->assertEquals(4, $this->TextStatistics->syllableCount("jingoistic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("joachim")); $this->assertEquals(3, $this->TextStatistics->syllableCount("joachims")); $this->assertEquals(2, $this->TextStatistics->syllableCount("joann")); $this->assertEquals(3, $this->TextStatistics->syllableCount("joanna")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jocelin")); $this->assertEquals(2, $this->TextStatistics->syllableCount("joceline")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jocelyn")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jocelyne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jocylan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("joedicke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("joel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("joey")); $this->assertEquals(1, $this->TextStatistics->syllableCount("joffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("joie")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jolicoeur")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jolliffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("jorde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jose")); $this->assertEquals(2, $this->TextStatistics->syllableCount("joycelyn")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jr")); $this->assertEquals(2, $this->TextStatistics->syllableCount("jua")); $this->assertEquals(2, $this->TextStatistics->syllableCount("judishe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("juedes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("juenemann")); $this->assertEquals(1, $this->TextStatistics->syllableCount("juhnke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("julietta")); $this->assertEquals(3, $this->TextStatistics->syllableCount("jurgensmeyer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("juul")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kadrmas")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kahane")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kahle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kahre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kalliel")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kalthoff")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kamakau")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kamikaze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kamler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kampe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("Kampuchea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kanade")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kaniewski")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kanouse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kantian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kaohsiung")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kapler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kappes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kappler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("karaoke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("karate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kardashian")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kartes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kaseman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kasler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kasprzak")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kasprzyk")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kasriel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kassler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kastenmeier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kastl")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kataoka")); $this->assertEquals(2, $this->TextStatistics->syllableCount("katharine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("katia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kawai")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kawate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kazuo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("keay")); $this->assertEquals(2, $this->TextStatistics->syllableCount("keebler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("keeffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kehne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kehres")); $this->assertEquals(3, $this->TextStatistics->syllableCount("keiichi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("keio")); $this->assertEquals(3, $this->TextStatistics->syllableCount("keisler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("keisling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("keister")); $this->assertEquals(3, $this->TextStatistics->syllableCount("keisuke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("keleman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kelemen")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kempe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kempke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kenealy")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kennebeck")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kennemore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kensler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("keplinger")); $this->assertEquals(2, $this->TextStatistics->syllableCount("keppler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kerien")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Kerouac")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kerpedjiev")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kesler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kesling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kessler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kganakga")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kgori")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Khaled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kibbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kidde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kiehne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kiev")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kigale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kightlinger")); $this->assertEquals(2, $this->TextStatistics->syllableCount("killian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("killilea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kimbler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kimbriel")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kimler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kindler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kingry")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kinsler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kinzlmaier")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kiplinger")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kippes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kirouac")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kisler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kisling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kissler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kjar")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kjos")); $this->assertEquals(2, $this->TextStatistics->syllableCount("klabunde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kleer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kleindienst")); $this->assertEquals(1, $this->TextStatistics->syllableCount("klenke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kleppe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kliethermes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("klingler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("klinke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("klitzke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("klocke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kmart")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kmetz")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kmiec")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kmiecik")); $this->assertEquals(1, $this->TextStatistics->syllableCount("knapke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kneer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("knievel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("knifelike")); $this->assertEquals(1, $this->TextStatistics->syllableCount("knobbe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("knoedler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("knowledgeware")); $this->assertEquals(1, $this->TextStatistics->syllableCount("knowles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Knute")); $this->assertEquals(3, $this->TextStatistics->syllableCount("koala")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kociemba")); $this->assertEquals(3, $this->TextStatistics->syllableCount("koegler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("koehne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("koepke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("koeppe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("koestler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("koetje")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kofler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kogler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kohne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kohnke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("koichi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kokate")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kolbe")); $this->assertEquals(5, $this->TextStatistics->syllableCount("kolodziejski")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kooy")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kooyman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kopke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("koppe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("koppes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("korea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("koreagate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("korean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("koreans")); $this->assertEquals(3, $this->TextStatistics->syllableCount("koreas")); $this->assertEquals(1, $this->TextStatistics->syllableCount("korte")); $this->assertEquals(5, $this->TextStatistics->syllableCount("korzeniewski")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kosanke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kostrzewski")); $this->assertEquals(3, $this->TextStatistics->syllableCount("koteles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kotler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kottler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kouri")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kowalke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("krabbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kracke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kraeutler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("krajina")); $this->assertEquals(1, $this->TextStatistics->syllableCount("krampe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kratzke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("krauer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kreher")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kreidler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kreisher")); $this->assertEquals(1, $this->TextStatistics->syllableCount("krenke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kressler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("krienke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kriete")); $this->assertEquals(1, $this->TextStatistics->syllableCount("krinke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kristoffe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kroening")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kroenke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("krone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kruckeberg")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kruschke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ksiazek")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kuala")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kuan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kuchler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kudrna")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kuechler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kuehne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kugler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kuhne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kuhnke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kumagai")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kunde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kuntze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("kunze")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kuo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kusler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kuzniar")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kvale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kvam")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kvasnicka")); $this->assertEquals(2, $this->TextStatistics->syllableCount("kvetch")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kveton")); $this->assertEquals(3, $this->TextStatistics->syllableCount("kvistad")); $this->assertEquals(4, $this->TextStatistics->syllableCount("kvitsinsky")); $this->assertEquals(5, $this->TextStatistics->syllableCount("kwh")); $this->assertEquals(1, $this->TextStatistics->syllableCount("labbe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("labine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("labonte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("laboratories")); $this->assertEquals(4, $this->TextStatistics->syllableCount("laboratory")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laborde")); $this->assertEquals(4, $this->TextStatistics->syllableCount("labossiere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("labouisse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("labrecque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("labrie")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lacaze")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lacefield")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lacewell")); $this->assertEquals(4, $this->TextStatistics->syllableCount("lacoursiere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lacquer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("laduke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("laferriere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laffitte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lafitte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lafler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laforte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("lafreniere")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lagace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lagrone")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lague")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lahaie")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laimbeer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("laity")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lajoie")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lakefield")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lakefront")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lakeland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lakeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lakeshore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lakeview")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lakewood")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lalone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lamaist")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lambe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("lambiase")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lamere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lamonte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lamotte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lampe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lampl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lancelet")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lande")); $this->assertEquals(1, $this->TextStatistics->syllableCount("landes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("landfried")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lanehart")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lanese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("langelier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("langone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lanier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lanphier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lansdowne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laos")); $this->assertEquals(3, $this->TextStatistics->syllableCount("laotian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lapine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lapointe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laporte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lappe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("laprade")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lapse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("laraia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("lareina")); $this->assertEquals(3, $this->TextStatistics->syllableCount("larine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("lariviere")); $this->assertEquals(1, $this->TextStatistics->syllableCount("larke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("larocque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("laroque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("larose")); $this->assertEquals(3, $this->TextStatistics->syllableCount("larrea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("larroquette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("laryngeal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lastrapes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("latticework")); $this->assertEquals(2, $this->TextStatistics->syllableCount("launches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("laureate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("laureates")); $this->assertEquals(3, $this->TextStatistics->syllableCount("laurentiis")); $this->assertEquals(4, $this->TextStatistics->syllableCount("laverdiere")); $this->assertEquals(4, $this->TextStatistics->syllableCount("laverdure")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lavere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lavergne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lavine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lavinia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lavoie")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lawrenceburg")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lawshe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lawyer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lawyerly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lawyers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lazare")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lcs")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ldbrinkman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leaches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("league")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leaguer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leaguers")); $this->assertEquals(1, $this->TextStatistics->syllableCount("leagues")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leah")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leander")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leandro")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leann")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leapfrogged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leaseback")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leasebacks")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leasehold")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leaseway")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lebegue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leboeuf")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lebouef")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leccese")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lecompte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lecomte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lecrone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leeches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leeuwen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leffler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("legare")); $this->assertEquals(2, $this->TextStatistics->syllableCount("legrande")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lehne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lehrke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leibfried")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leibler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leicester")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leino")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leist")); $this->assertEquals(1, $this->TextStatistics->syllableCount("leitzke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lelia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lembcke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lembke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lemcke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lemieux")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lemire")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lempke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lendl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lenient")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lenke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lentine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leonelle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lepere")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lepine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lepore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lequire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lereah")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lesane")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lesesne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("letarte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("letitia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lettiere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("leveque")); $this->assertEquals(3, $this->TextStatistics->syllableCount("leveraging")); $this->assertEquals(4, $this->TextStatistics->syllableCount("leverone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("levien")); $this->assertEquals(2, $this->TextStatistics->syllableCount("levitte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lezotte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lhommedieu")); $this->assertEquals(3, $this->TextStatistics->syllableCount("liaison")); $this->assertEquals(3, $this->TextStatistics->syllableCount("liaisons")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lian")); $this->assertEquals(1, $this->TextStatistics->syllableCount("liang")); $this->assertEquals(2, $this->TextStatistics->syllableCount("liao")); $this->assertEquals(2, $this->TextStatistics->syllableCount("liasson")); $this->assertEquals(5, $this->TextStatistics->syllableCount("liberalization")); $this->assertEquals(5, $this->TextStatistics->syllableCount("liberatore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("licciardi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("licea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("license")); $this->assertEquals(3, $this->TextStatistics->syllableCount("licentious")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lichte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("liebler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lieu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lieurance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Lieut")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lieutenant")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lieutenants")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifeblood")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifeboat")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifeboats")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifeco")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifeguard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifelike")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifeline")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifelines")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifelong")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lifesaver")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lifesavers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lifesaving")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifespan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifestyle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifestyles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifetime")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lifetimes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("liffe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("likelier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("likeliest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("likelihood")); $this->assertEquals(2, $this->TextStatistics->syllableCount("likewise")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lilienthal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("limehouse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("limelight")); $this->assertEquals(2, $this->TextStatistics->syllableCount("limestone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("limestones")); $this->assertEquals(1, $this->TextStatistics->syllableCount("linde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lindeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lineage")); $this->assertEquals(4, $this->TextStatistics->syllableCount("lineages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lineal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("linear")); $this->assertEquals(4, $this->TextStatistics->syllableCount("linearly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lineback")); $this->assertEquals(3, $this->TextStatistics->syllableCount("linebacker")); $this->assertEquals(3, $this->TextStatistics->syllableCount("linebackers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lineberger")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lineman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("linemen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lineweaver")); $this->assertEquals(4, $this->TextStatistics->syllableCount("linguistically")); $this->assertEquals(1, $this->TextStatistics->syllableCount("linke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("linnea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("linneman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("linnemann")); $this->assertEquals(4, $this->TextStatistics->syllableCount("linoleum")); $this->assertEquals(1, $this->TextStatistics->syllableCount("linse")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lipke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lippe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("liqueur")); $this->assertEquals(2, $this->TextStatistics->syllableCount("liqueurs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("litalien")); $this->assertEquals(3, $this->TextStatistics->syllableCount("litigious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("littlest")); $this->assertEquals(1, $this->TextStatistics->syllableCount("liu")); $this->assertEquals(3, $this->TextStatistics->syllableCount("livelier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("liveliest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("livelihood")); $this->assertEquals(3, $this->TextStatistics->syllableCount("liveliness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("liveried")); $this->assertEquals(2, $this->TextStatistics->syllableCount("livestock")); $this->assertEquals(3, $this->TextStatistics->syllableCount("livonia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lizotte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("llorens")); $this->assertEquals(4, $this->TextStatistics->syllableCount("loaiza")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lobbyist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lobbyists")); $this->assertEquals(1, $this->TextStatistics->syllableCount("locke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lockyer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lodestar")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lodestone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lodgepole")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loeffler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("loella")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loess")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loew")); $this->assertEquals(3, $this->TextStatistics->syllableCount("loewen")); $this->assertEquals(4, $this->TextStatistics->syllableCount("loewenstein")); $this->assertEquals(4, $this->TextStatistics->syllableCount("loewenthal")); $this->assertEquals(4, $this->TextStatistics->syllableCount("logarithms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("logically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("logistically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("logiudice")); $this->assertEquals(1, $this->TextStatistics->syllableCount("logue")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lohnes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lohse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("loiacano")); $this->assertEquals(4, $this->TextStatistics->syllableCount("loiacono")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lois")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loise")); $this->assertEquals(3, $this->TextStatistics->syllableCount("loneliness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lonetree")); $this->assertEquals(3, $this->TextStatistics->syllableCount("longenecker")); $this->assertEquals(3, $this->TextStatistics->syllableCount("longshoremen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loosestrife")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loosestrifes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lopeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lorean")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lotte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lottes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lotze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("louanna")); $this->assertEquals(2, $this->TextStatistics->syllableCount("louart")); $this->assertEquals(2, $this->TextStatistics->syllableCount("louisette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("louque")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lourdes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("louviere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loveday")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lovegrove")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lovejoy")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loveland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("loveridge")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lovewell")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lowekamp")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lp")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lpn")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ls")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lsd")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ltd")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lubke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lucchese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("luciani")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lucianna")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lucien")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lucke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("luckiest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ludeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ludemann")); $this->assertEquals(1, $this->TextStatistics->syllableCount("luebbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("luebke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lueck")); $this->assertEquals(1, $this->TextStatistics->syllableCount("luecke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("luedecke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("luella")); $this->assertEquals(3, $this->TextStatistics->syllableCount("luera")); $this->assertEquals(4, $this->TextStatistics->syllableCount("luevano")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lui")); $this->assertEquals(3, $this->TextStatistics->syllableCount("luigi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("luis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("luisa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lukehart")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lukewarm")); $this->assertEquals(3, $this->TextStatistics->syllableCount("luncheonette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lunches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lunde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("luoma")); $this->assertEquals(2, $this->TextStatistics->syllableCount("luong")); $this->assertEquals(3, $this->TextStatistics->syllableCount("luongo")); $this->assertEquals(1, $this->TextStatistics->syllableCount("luque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("luquette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lutze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lutzke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("luu")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lynde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lyon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lyondell")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lyonnais")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lyonnaise")); $this->assertEquals(2, $this->TextStatistics->syllableCount("lyons")); $this->assertEquals(3, $this->TextStatistics->syllableCount("lyphomed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("lysne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mabry")); $this->assertEquals(2, $this->TextStatistics->syllableCount("macaques")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maccabean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("macdiarmid")); $this->assertEquals(3, $this->TextStatistics->syllableCount("machete")); $this->assertEquals(3, $this->TextStatistics->syllableCount("machetes")); $this->assertEquals(6, $this->TextStatistics->syllableCount("machiavellian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("machinea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("maciag")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maciejewski")); $this->assertEquals(1, $this->TextStatistics->syllableCount("macke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mackiewicz")); $this->assertEquals(2, $this->TextStatistics->syllableCount("macmahon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("macqueen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("macrame")); $this->assertEquals(3, $this->TextStatistics->syllableCount("macwilliams")); $this->assertEquals(2, $this->TextStatistics->syllableCount("madl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("madlen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("madore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maeda")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maekawa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maenza")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maestri")); $this->assertEquals(2, $this->TextStatistics->syllableCount("maez")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maglione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("magnolia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("magnolias")); $this->assertEquals(3, $this->TextStatistics->syllableCount("magnone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("magouirk")); $this->assertEquals(1, $this->TextStatistics->syllableCount("maher")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mahnke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("maia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mainichi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("maio")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maiolo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maiorana")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maiorano")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maiorino")); $this->assertEquals(2, $this->TextStatistics->syllableCount("maish")); $this->assertEquals(3, $this->TextStatistics->syllableCount("majure")); $this->assertEquals(2, $this->TextStatistics->syllableCount("makegoods")); $this->assertEquals(2, $this->TextStatistics->syllableCount("makeshift")); $this->assertEquals(3, $this->TextStatistics->syllableCount("malave")); $this->assertEquals(2, $this->TextStatistics->syllableCount("malinde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maline")); $this->assertEquals(3, $this->TextStatistics->syllableCount("malkiel")); $this->assertEquals(6, $this->TextStatistics->syllableCount("malleability")); $this->assertEquals(4, $this->TextStatistics->syllableCount("malleable")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mandl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("manfred")); $this->assertEquals(5, $this->TextStatistics->syllableCount("mangiaracina")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mangine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mangling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mangone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mangope")); $this->assertEquals(1, $this->TextStatistics->syllableCount("manke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mannerisms")); $this->assertEquals(2, $this->TextStatistics->syllableCount("manrique")); $this->assertEquals(1, $this->TextStatistics->syllableCount("manske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("manthe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mantione")); $this->assertEquals(4, $this->TextStatistics->syllableCount("manzanares")); $this->assertEquals(4, $this->TextStatistics->syllableCount("manzione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maoris")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mapplethorpe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("maraline")); $this->assertEquals(4, $this->TextStatistics->syllableCount("marcelline")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marchese")); $this->assertEquals(4, $this->TextStatistics->syllableCount("marchione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marcial")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marciante")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marcone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marcotte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("margeotes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("margiotta")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mariel")); $this->assertEquals(5, $this->TextStatistics->syllableCount("marielitos")); $this->assertEquals(4, $this->TextStatistics->syllableCount("marijuana")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marineland")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marion")); $this->assertEquals(1, $this->TextStatistics->syllableCount("marje")); $this->assertEquals(1, $this->TextStatistics->syllableCount("marke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("markedly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marotte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("marque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marquee")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marquees")); $this->assertEquals(1, $this->TextStatistics->syllableCount("marques")); $this->assertEquals(2, $this->TextStatistics->syllableCount("marquette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marriages")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marrone")); $this->assertEquals(1, $this->TextStatistics->syllableCount("marschke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("marte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("marthe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("martinique")); $this->assertEquals(3, $this->TextStatistics->syllableCount("martire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("martone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("marui")); $this->assertEquals(4, $this->TextStatistics->syllableCount("masaaki")); $this->assertEquals(3, $this->TextStatistics->syllableCount("masai")); $this->assertEquals(3, $this->TextStatistics->syllableCount("masao")); $this->assertEquals(1, $this->TextStatistics->syllableCount("maschke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("masciarelli")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mascioli")); $this->assertEquals(2, $this->TextStatistics->syllableCount("masefield")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maslen")); $this->assertEquals(4, $this->TextStatistics->syllableCount("massacring")); $this->assertEquals(3, $this->TextStatistics->syllableCount("massicotte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("massingale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mastandrea")); $this->assertEquals(5, $this->TextStatistics->syllableCount("mastrogiovanni")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mastroianni")); $this->assertEquals(4, $this->TextStatistics->syllableCount("matarese")); $this->assertEquals(4, $this->TextStatistics->syllableCount("materiel")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mathai")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mathea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mathieu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mathilde")); $this->assertEquals(5, $this->TextStatistics->syllableCount("matrilineal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("matsui")); $this->assertEquals(3, $this->TextStatistics->syllableCount("matsuo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("matsuoka")); $this->assertEquals(4, $this->TextStatistics->syllableCount("matsuura")); $this->assertEquals(1, $this->TextStatistics->syllableCount("matte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mattes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("matthea")); $this->assertEquals(1, $this->TextStatistics->syllableCount("matthes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("matzke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maurine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mausoleum")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mawr")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maxion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("maxzide")); $this->assertEquals(2, $this->TextStatistics->syllableCount("maybe")); $this->assertEquals(5, $this->TextStatistics->syllableCount("mazowiecki")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mazzei")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mazzone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mbank")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcalinden")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcauliffe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcbrien")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mccaffery")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mccague")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mccahan")); $this->assertEquals(5, $this->TextStatistics->syllableCount("mccarthyism")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mccaughan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mccluer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mccuin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcdiarmid")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcgeough")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcgoey")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mchargue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mckeague")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcmillian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mcmurtrie")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcneer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcqueary")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcqueen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcqueeney")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mctague")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mcteer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mctigue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcwilliam")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mcwilliams")); $this->assertEquals(1, $this->TextStatistics->syllableCount("meagher")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meander")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meandered")); $this->assertEquals(4, $this->TextStatistics->syllableCount("meandering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meanders")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mechanically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mechanisms")); $this->assertEquals(1, $this->TextStatistics->syllableCount("meckes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("medically")); $this->assertEquals(6, $this->TextStatistics->syllableCount("mediterranean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("medlen")); $this->assertEquals(1, $this->TextStatistics->syllableCount("meetze")); $this->assertEquals(4, $this->TextStatistics->syllableCount("megacarriers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("megace")); $this->assertEquals(6, $this->TextStatistics->syllableCount("megalomaniacal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("meidl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("meierfeld")); $this->assertEquals(1, $this->TextStatistics->syllableCount("meincke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("meindl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("meinecke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("meinke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meiosis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meisler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("melamed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("meloche")); $this->assertEquals(3, $this->TextStatistics->syllableCount("melone")); $this->assertEquals(5, $this->TextStatistics->syllableCount("memorabilia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("menapace")); $this->assertEquals(4, $this->TextStatistics->syllableCount("menasion")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mende")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Mengele")); $this->assertEquals(1, $this->TextStatistics->syllableCount("menke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("menkes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("menstruation")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mente")); $this->assertEquals(1, $this->TextStatistics->syllableCount("menze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mercedes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mercure")); $this->assertEquals(6, $this->TextStatistics->syllableCount("meridionale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("merion")); $this->assertEquals(1, $this->TextStatistics->syllableCount("merle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("meschke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("meserole")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mesler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mesozoic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("messagepad")); $this->assertEquals(2, $this->TextStatistics->syllableCount("messler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("messrs")); $this->assertEquals(5, $this->TextStatistics->syllableCount("metabolisms")); $this->assertEquals(2, $this->TextStatistics->syllableCount("metcalfe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("methodisms")); $this->assertEquals(2, $this->TextStatistics->syllableCount("metier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mettler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("metze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mfume")); $this->assertEquals(3, $this->TextStatistics->syllableCount("micale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("micciche")); $this->assertEquals(2, $this->TextStatistics->syllableCount("michener")); $this->assertEquals(2, $this->TextStatistics->syllableCount("michl")); $this->assertEquals(1, $this->TextStatistics->syllableCount("micke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("microcosm")); $this->assertEquals(4, $this->TextStatistics->syllableCount("micrografx")); $this->assertEquals(6, $this->TextStatistics->syllableCount("microorganisms")); $this->assertEquals(5, $this->TextStatistics->syllableCount("microscopically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("midyette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("miert")); $this->assertEquals(4, $this->TextStatistics->syllableCount("migliore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mignone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mijares")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mildrid")); $this->assertEquals(2, $this->TextStatistics->syllableCount("milestone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("milestones")); $this->assertEquals(2, $this->TextStatistics->syllableCount("milieu")); $this->assertEquals(1, $this->TextStatistics->syllableCount("milke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("milne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("milnes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("minamide")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mincemeat")); $this->assertEquals(3, $this->TextStatistics->syllableCount("minea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("minebea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("minefield")); $this->assertEquals(2, $this->TextStatistics->syllableCount("minehart")); $this->assertEquals(3, $this->TextStatistics->syllableCount("minesweeper")); $this->assertEquals(3, $this->TextStatistics->syllableCount("minesweepers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mineworkers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mingling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("miniard")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miniaturized")); $this->assertEquals(3, $this->TextStatistics->syllableCount("minjares")); $this->assertEquals(1, $this->TextStatistics->syllableCount("minke")); $this->assertEquals(5, $this->TextStatistics->syllableCount("minneapolis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("minoan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("minogue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("minteer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("minuet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("minuteman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mireles")); $this->assertEquals(4, $this->TextStatistics->syllableCount("misbehavior")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miscarriages")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mischarged")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mischke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mischler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("miscreant")); $this->assertEquals(3, $this->TextStatistics->syllableCount("miscreants")); $this->assertEquals(4, $this->TextStatistics->syllableCount("miscreations")); $this->assertEquals(3, $this->TextStatistics->syllableCount("misfire")); $this->assertEquals(2, $this->TextStatistics->syllableCount("misled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mismatched")); $this->assertEquals(4, $this->TextStatistics->syllableCount("missildine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("missler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mitschke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mitsui")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mittler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("mixte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("miyake")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mkhatshwa")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moab")); $this->assertEquals(3, $this->TextStatistics->syllableCount("moammar")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moates")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mobiliare")); $this->assertEquals(4, $this->TextStatistics->syllableCount("modestine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("moening")); $this->assertEquals(1, $this->TextStatistics->syllableCount("moerbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("moerke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("moerman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mohamed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mohammed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mojave")); $this->assertEquals(2, $this->TextStatistics->syllableCount("molehill")); $this->assertEquals(2, $this->TextStatistics->syllableCount("molelike")); $this->assertEquals(2, $this->TextStatistics->syllableCount("molesworth")); $this->assertEquals(3, $this->TextStatistics->syllableCount("moncure")); $this->assertEquals(1, $this->TextStatistics->syllableCount("monde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("monisms")); $this->assertEquals(1, $this->TextStatistics->syllableCount("monje")); $this->assertEquals(3, $this->TextStatistics->syllableCount("monologue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("monologues")); $this->assertEquals(5, $this->TextStatistics->syllableCount("mononuclear")); $this->assertEquals(5, $this->TextStatistics->syllableCount("monotheism")); $this->assertEquals(2, $this->TextStatistics->syllableCount("monsieur")); $this->assertEquals(2, $this->TextStatistics->syllableCount("monsieurs")); $this->assertEquals(3, $this->TextStatistics->syllableCount("montagnier")); $this->assertEquals(5, $this->TextStatistics->syllableCount("montefiore")); $this->assertEquals(5, $this->TextStatistics->syllableCount("monteleone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("montgomery")); $this->assertEquals(3, $this->TextStatistics->syllableCount("montiel")); $this->assertEquals(3, $this->TextStatistics->syllableCount("montien")); $this->assertEquals(3, $this->TextStatistics->syllableCount("montieth")); $this->assertEquals(3, $this->TextStatistics->syllableCount("montone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moorehead")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moorehouse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moorestown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moosehead")); $this->assertEquals(1, $this->TextStatistics->syllableCount("moppes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morace")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("morehead")); $this->assertEquals(2, $this->TextStatistics->syllableCount("morehouse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moreland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moreman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mores")); $this->assertEquals(2, $this->TextStatistics->syllableCount("morever")); $this->assertEquals(1, $this->TextStatistics->syllableCount("morgue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morones")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morriss")); $this->assertEquals(3, $this->TextStatistics->syllableCount("morrone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mortgagepower")); $this->assertEquals(1, $this->TextStatistics->syllableCount("morze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mosaic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mosaical")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mosaics")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moseley")); $this->assertEquals(2, $this->TextStatistics->syllableCount("moseman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mosier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mosler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mothershed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("motl")); $this->assertEquals(5, $this->TextStatistics->syllableCount("motorcyclist")); $this->assertEquals(5, $this->TextStatistics->syllableCount("motorcyclists")); $this->assertEquals(1, $this->TextStatistics->syllableCount("motte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mousehole")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mousetrap")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mozambique")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mozartean")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mpeg")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mpg")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mph")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mr")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mrs")); $this->assertEquals(3, $this->TextStatistics->syllableCount("msgr")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mssrs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mtel")); $this->assertEquals(1, $this->TextStatistics->syllableCount("muecke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("muehlebach")); $this->assertEquals(2, $this->TextStatistics->syllableCount("muffler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mufflers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mugabe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("muhamed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("muhammed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mui")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mukai")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mulches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mulqueen")); $this->assertEquals(5, $this->TextStatistics->syllableCount("multiemployer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mulvehill")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mungia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("munguia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("muraoka")); $this->assertEquals(4, $this->TextStatistics->syllableCount("muratore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("murguia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("muriel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("murrelet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("murrieta")); $this->assertEquals(3, $this->TextStatistics->syllableCount("muscling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("museum")); $this->assertEquals(3, $this->TextStatistics->syllableCount("museums")); $this->assertEquals(3, $this->TextStatistics->syllableCount("musically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("mustaches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("mustachioed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("myhre")); $this->assertEquals(5, $this->TextStatistics->syllableCount("myocardial")); $this->assertEquals(5, $this->TextStatistics->syllableCount("myocardium")); $this->assertEquals(4, $this->TextStatistics->syllableCount("myopia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("myopic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("myosin")); $this->assertEquals(4, $this->TextStatistics->syllableCount("myotrophin")); $this->assertEquals(2, $this->TextStatistics->syllableCount("mystique")); $this->assertEquals(6, $this->TextStatistics->syllableCount("NAACP")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nacional")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nacke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nacogdoches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nadal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nadler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nagai")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nagao")); $this->assertEquals(2, $this->TextStatistics->syllableCount("naim")); $this->assertEquals(2, $this->TextStatistics->syllableCount("naish")); $this->assertEquals(2, $this->TextStatistics->syllableCount("naive")); $this->assertEquals(3, $this->TextStatistics->syllableCount("naively")); $this->assertEquals(4, $this->TextStatistics->syllableCount("naivete")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nakai")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nakao")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nakasone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("naked")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nameplate")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nameplates")); $this->assertEquals(2, $this->TextStatistics->syllableCount("namesake")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nantes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("naoma")); $this->assertEquals(3, $this->TextStatistics->syllableCount("naomi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("napea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nardone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("narvaez")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nasional")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nasr")); $this->assertEquals(3, $this->TextStatistics->syllableCount("natale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("natalia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nationale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nationales")); $this->assertEquals(1, $this->TextStatistics->syllableCount("natzke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nausea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nauseated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nauseating")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nauta")); $this->assertEquals(3, $this->TextStatistics->syllableCount("navellier")); $this->assertEquals(5, $this->TextStatistics->syllableCount("nazionale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("neanderthal")); $this->assertEquals(4, $this->TextStatistics->syllableCount("neanderthals")); $this->assertEquals(5, $this->TextStatistics->syllableCount("neapolitan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nedlloyd")); $this->assertEquals(3, $this->TextStatistics->syllableCount("needler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("neer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("negotiate")); $this->assertEquals(5, $this->TextStatistics->syllableCount("negotiated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("negotiates")); $this->assertEquals(5, $this->TextStatistics->syllableCount("negotiating")); $this->assertEquals(5, $this->TextStatistics->syllableCount("negotiation")); $this->assertEquals(5, $this->TextStatistics->syllableCount("negotiations")); $this->assertEquals(5, $this->TextStatistics->syllableCount("negotiator")); $this->assertEquals(5, $this->TextStatistics->syllableCount("negotiators")); $this->assertEquals(2, $this->TextStatistics->syllableCount("neidl")); $this->assertEquals(4, $this->TextStatistics->syllableCount("neidlinger")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neisler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("neitzke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nemean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neoax")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neorx")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nepl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nesler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nessler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nestea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nestler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("neuendorffer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("neuroscience")); $this->assertEquals(2, $this->TextStatistics->syllableCount("newcombe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("newgateway")); $this->assertEquals(2, $this->TextStatistics->syllableCount("newtowne")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ngema")); $this->assertEquals(3, $this->TextStatistics->syllableCount("niagara")); $this->assertEquals(2, $this->TextStatistics->syllableCount("niaid")); $this->assertEquals(1, $this->TextStatistics->syllableCount("niall")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nibbe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("niches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("niclaneshia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nicolai")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nicoline")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nicosia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nienhuis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nieves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("NIH")); $this->assertEquals(2, $this->TextStatistics->syllableCount("niihau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nike")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ninefold")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nineteen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nineteenth")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nineties")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ninety")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ninneman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("niquette")); $this->assertEquals(5, $this->TextStatistics->syllableCount("nitrosamines")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nitschke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("njt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noah")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nobbe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nobuo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nodine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noel")); $this->assertEquals(1, $this->TextStatistics->syllableCount("noffke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nogales")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nogueira")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noire")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nolde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nolte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("noncorporate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nondefense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("noninterest")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nonlinear")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nonnuclear")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nonreligious")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nonsense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nordine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nordling")); $this->assertEquals(4, $this->TextStatistics->syllableCount("noriega")); $this->assertEquals(4, $this->TextStatistics->syllableCount("noriegas")); $this->assertEquals(2, $this->TextStatistics->syllableCount("norsemen")); $this->assertEquals(1, $this->TextStatistics->syllableCount("norte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("norwegian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("norwegians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nosebleed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nosedive")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nosedived")); $this->assertEquals(3, $this->TextStatistics->syllableCount("noseworthy")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nostalgia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("notebook")); $this->assertEquals(2, $this->TextStatistics->syllableCount("notebooks")); $this->assertEquals(3, $this->TextStatistics->syllableCount("noteholders")); $this->assertEquals(4, $this->TextStatistics->syllableCount("notestine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noteware")); $this->assertEquals(3, $this->TextStatistics->syllableCount("noteworthy")); $this->assertEquals(1, $this->TextStatistics->syllableCount("notte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nov")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noxema")); $this->assertEquals(2, $this->TextStatistics->syllableCount("noxious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nuclear")); $this->assertEquals(4, $this->TextStatistics->syllableCount("nucleation")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nuclei")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nucleic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nucleus")); $this->assertEquals(2, $this->TextStatistics->syllableCount("numed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("numerically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nunemaker")); $this->assertEquals(2, $this->TextStatistics->syllableCount("nunsense")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nurre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nusbaum")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nutrient")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nutrients")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nutritious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nvhomes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("nvryan")); $this->assertEquals(1, $this->TextStatistics->syllableCount("nyers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oad")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oahu")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oases")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oasis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("obermaier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("oblique")); $this->assertEquals(3, $this->TextStatistics->syllableCount("obliquely")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oblivion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("obnoxious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oboist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("obrien")); $this->assertEquals(4, $this->TextStatistics->syllableCount("obscenely")); $this->assertEquals(2, $this->TextStatistics->syllableCount("observed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ocain")); $this->assertEquals(3, $this->TextStatistics->syllableCount("occupiers")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oceanic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oct")); $this->assertEquals(2, $this->TextStatistics->syllableCount("oddler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("odele")); $this->assertEquals(3, $this->TextStatistics->syllableCount("odp")); $this->assertEquals(4, $this->TextStatistics->syllableCount("odysseus")); $this->assertEquals(1, $this->TextStatistics->syllableCount("oehlke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("oehme")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oeien")); $this->assertEquals(1, $this->TextStatistics->syllableCount("oelke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("oest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("oeuvre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ofc")); $this->assertEquals(2, $this->TextStatistics->syllableCount("offense")); $this->assertEquals(4, $this->TextStatistics->syllableCount("officeholder")); $this->assertEquals(4, $this->TextStatistics->syllableCount("officeholders")); $this->assertEquals(3, $this->TextStatistics->syllableCount("officemax")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oglethorpe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ognibene")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oguin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ohare")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ohlmeyer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("oie")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oishi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ok")); $this->assertEquals(3, $this->TextStatistics->syllableCount("okabe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("okane")); $this->assertEquals(3, $this->TextStatistics->syllableCount("okayed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("okeeffe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oken")); $this->assertEquals(5, $this->TextStatistics->syllableCount("okoniewski")); $this->assertEquals(2, $this->TextStatistics->syllableCount("olague")); $this->assertEquals(1, $this->TextStatistics->syllableCount("olde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("olea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oleander")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oleaster")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oligarchs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("olinde")); $this->assertEquals(4, $this->TextStatistics->syllableCount("olivares")); $this->assertEquals(2, $this->TextStatistics->syllableCount("omelet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("omelets")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oncale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oncogenes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("onecomm")); $this->assertEquals(2, $this->TextStatistics->syllableCount("oneself")); $this->assertEquals(2, $this->TextStatistics->syllableCount("onetime")); $this->assertEquals(1, $this->TextStatistics->syllableCount("oooh")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ooohs")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ooten")); $this->assertEquals(2, $this->TextStatistics->syllableCount("opaque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("opera")); $this->assertEquals(2, $this->TextStatistics->syllableCount("operas")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ophelia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oplinger")); $this->assertEquals(3, $this->TextStatistics->syllableCount("optically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orangeburg")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("organically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("organisms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orgasms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orient")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oriental")); $this->assertEquals(4, $this->TextStatistics->syllableCount("orientals")); $this->assertEquals(5, $this->TextStatistics->syllableCount("orientation")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oriented")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oriordan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orleans")); $this->assertEquals(1, $this->TextStatistics->syllableCount("orme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ormes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ormonde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("orourke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orpheum")); $this->assertEquals(3, $this->TextStatistics->syllableCount("orpheus")); $this->assertEquals(5, $this->TextStatistics->syllableCount("orthodontia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("osake")); $this->assertEquals(3, $this->TextStatistics->syllableCount("oshea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("osmer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("osred")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ostentatious")); $this->assertEquals(5, $this->TextStatistics->syllableCount("ostentatiously")); $this->assertEquals(6, $this->TextStatistics->syllableCount("osteoarthritis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ostia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ostling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ostriches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("otte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ouimet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ouimette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("our")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ourada")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ours")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ourself")); $this->assertEquals(3, $this->TextStatistics->syllableCount("outler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("outstretched")); $this->assertEquals(5, $this->TextStatistics->syllableCount("overambitious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Overbye")); $this->assertEquals(3, $this->TextStatistics->syllableCount("overcharged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("overmatched")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overreaches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("overreact")); $this->assertEquals(5, $this->TextStatistics->syllableCount("overreacted")); $this->assertEquals(5, $this->TextStatistics->syllableCount("overreacting")); $this->assertEquals(5, $this->TextStatistics->syllableCount("overreaction")); $this->assertEquals(4, $this->TextStatistics->syllableCount("oviedo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pacemaker")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pacemakers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pacesetter")); $this->assertEquals(2, $this->TextStatistics->syllableCount("paceway")); $this->assertEquals(2, $this->TextStatistics->syllableCount("paez")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pagemaker")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pai")); $this->assertEquals(3, $this->TextStatistics->syllableCount("painewebber")); $this->assertEquals(2, $this->TextStatistics->syllableCount("paiute")); $this->assertEquals(3, $this->TextStatistics->syllableCount("palauans")); $this->assertEquals(5, $this->TextStatistics->syllableCount("paleozoic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("palese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pallone")); $this->assertEquals(1, $this->TextStatistics->syllableCount("palme")); $this->assertEquals(4, $this->TextStatistics->syllableCount("palmieri")); $this->assertEquals(4, $this->TextStatistics->syllableCount("palmstierna")); $this->assertEquals(4, $this->TextStatistics->syllableCount("palomares")); $this->assertEquals(4, $this->TextStatistics->syllableCount("panacea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pancreas")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pancreatic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pannone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("panthea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pantheistic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paolella")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paoletti")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paolillo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paolini")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paolino")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paolucci")); $this->assertEquals(2, $this->TextStatistics->syllableCount("paone")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paonessa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("papale")); $this->assertEquals(4, $this->TextStatistics->syllableCount("papandrea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("papier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("papke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("paque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("paquette")); $this->assertEquals(5, $this->TextStatistics->syllableCount("paradoxically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paranoia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paranoiac")); $this->assertEquals(5, $this->TextStatistics->syllableCount("paraphernalia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paratore")); $this->assertEquals(1, $this->TextStatistics->syllableCount("parde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("paredes")); $this->assertEquals(5, $this->TextStatistics->syllableCount("parimutuel")); $this->assertEquals(1, $this->TextStatistics->syllableCount("parke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("parkes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("parliament")); $this->assertEquals(5, $this->TextStatistics->syllableCount("parliamentary")); $this->assertEquals(3, $this->TextStatistics->syllableCount("parliaments")); $this->assertEquals(3, $this->TextStatistics->syllableCount("parmele")); $this->assertEquals(4, $this->TextStatistics->syllableCount("paroxysm")); $this->assertEquals(7, $this->TextStatistics->syllableCount("partecipazioni")); $this->assertEquals(5, $this->TextStatistics->syllableCount("partiality")); $this->assertEquals(4, $this->TextStatistics->syllableCount("parziale")); $this->assertEquals(1, $this->TextStatistics->syllableCount("paschke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pasquale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("passageway")); $this->assertEquals(3, $this->TextStatistics->syllableCount("passaic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pastiches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("patnaude")); $this->assertEquals(3, $this->TextStatistics->syllableCount("patrie")); $this->assertEquals(5, $this->TextStatistics->syllableCount("patrilineal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("patrone")); $this->assertEquals(1, $this->TextStatistics->syllableCount("patzke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pautler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pavese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peacefulness")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peacekeeper")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peacekeepers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peacekeeping")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peacemaker")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peacemakers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peacemaking")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peacetime")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peaches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pearle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pecore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("peculiar")); $this->assertEquals(4, $this->TextStatistics->syllableCount("peculiarly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peddler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peddlers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pedone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peebler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("peer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peerless")); $this->assertEquals(1, $this->TextStatistics->syllableCount("peers")); $this->assertEquals(4, $this->TextStatistics->syllableCount("peinado")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pelaez")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pelagia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pele")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pelletier")); $this->assertEquals(4, $this->TextStatistics->syllableCount("penelope")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pennsylvania")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("penthea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peopled")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pepe")); $this->assertEquals(5, $this->TextStatistics->syllableCount("pepenadores")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peppler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("peragine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("peraino")); $this->assertEquals(3, $this->TextStatistics->syllableCount("perales")); $this->assertEquals(3, $this->TextStatistics->syllableCount("perea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("peres")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pergande")); $this->assertEquals(3, $this->TextStatistics->syllableCount("perine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("perle")); $this->assertEquals(6, $this->TextStatistics->syllableCount("permeability")); $this->assertEquals(3, $this->TextStatistics->syllableCount("permeate")); $this->assertEquals(4, $this->TextStatistics->syllableCount("permeated")); $this->assertEquals(3, $this->TextStatistics->syllableCount("permeates")); $this->assertEquals(4, $this->TextStatistics->syllableCount("perniciaro")); $this->assertEquals(4, $this->TextStatistics->syllableCount("perricone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("perrine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("perrone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("perseus")); $this->assertEquals(4, $this->TextStatistics->syllableCount("persuadable")); $this->assertEquals(2, $this->TextStatistics->syllableCount("persuade")); $this->assertEquals(3, $this->TextStatistics->syllableCount("persuaded")); $this->assertEquals(2, $this->TextStatistics->syllableCount("persuades")); $this->assertEquals(3, $this->TextStatistics->syllableCount("persuading")); $this->assertEquals(3, $this->TextStatistics->syllableCount("persuasion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("persuasions")); $this->assertEquals(3, $this->TextStatistics->syllableCount("persuasive")); $this->assertEquals(4, $this->TextStatistics->syllableCount("persuasively")); $this->assertEquals(4, $this->TextStatistics->syllableCount("persuasiveness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pescatore")); $this->assertEquals(1, $this->TextStatistics->syllableCount("peschke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("petrea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("petroleum")); $this->assertEquals(3, $this->TextStatistics->syllableCount("petrone")); $this->assertEquals(5, $this->TextStatistics->syllableCount("petrovietnam")); $this->assertEquals(2, $this->TextStatistics->syllableCount("petteway")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pettine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pevehouse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pfiester")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ph")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pharaonic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("pharisaism")); $this->assertEquals(2, $this->TextStatistics->syllableCount("phaseout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("phebe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("philistia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("phillippe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("phineas")); $this->assertEquals(4, $this->TextStatistics->syllableCount("phlcorp")); $this->assertEquals(2, $this->TextStatistics->syllableCount("phoebe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("phonemate")); $this->assertEquals(4, $this->TextStatistics->syllableCount("phonetically")); $this->assertEquals(5, $this->TextStatistics->syllableCount("photoelectric")); $this->assertEquals(5, $this->TextStatistics->syllableCount("photovoltaic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("photovoltaics")); $this->assertEquals(2, $this->TextStatistics->syllableCount("phuong")); $this->assertEquals(2, $this->TextStatistics->syllableCount("physique")); $this->assertEquals(3, $this->TextStatistics->syllableCount("piccone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pichler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pickler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pickren")); $this->assertEquals(2, $this->TextStatistics->syllableCount("picotte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("picower")); $this->assertEquals(3, $this->TextStatistics->syllableCount("picturetel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("piecemeal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("piecework")); $this->assertEquals(2, $this->TextStatistics->syllableCount("piedboeuf")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pierette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pierrelouis")); $this->assertEquals(1, $this->TextStatistics->syllableCount("piers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pieties")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pietro")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pietruski")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pietrzak")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pietrzyk")); $this->assertEquals(1, $this->TextStatistics->syllableCount("piette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("piety")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pignone")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pigue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pilotte")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pingitore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pipefishes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pipeline")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pipelines")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pipetec")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pique")); $this->assertEquals(1, $this->TextStatistics->syllableCount("piqued")); $this->assertEquals(2, $this->TextStatistics->syllableCount("piquette")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pirkl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pirrone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pisces")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pischke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pisciotta")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pitchblende")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pitiable")); $this->assertEquals(5, $this->TextStatistics->syllableCount("pituitary")); $this->assertEquals(2, $this->TextStatistics->syllableCount("placeway")); $this->assertEquals(1, $this->TextStatistics->syllableCount("placke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("plagiarism")); $this->assertEquals(1, $this->TextStatistics->syllableCount("plague")); $this->assertEquals(1, $this->TextStatistics->syllableCount("plagued")); $this->assertEquals(1, $this->TextStatistics->syllableCount("plagues")); $this->assertEquals(2, $this->TextStatistics->syllableCount("plaia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("plaisted")); $this->assertEquals(1, $this->TextStatistics->syllableCount("plante")); $this->assertEquals(1, $this->TextStatistics->syllableCount("plaque")); $this->assertEquals(1, $this->TextStatistics->syllableCount("plaques")); $this->assertEquals(3, $this->TextStatistics->syllableCount("plateauing")); $this->assertEquals(2, $this->TextStatistics->syllableCount("platelets")); $this->assertEquals(2, $this->TextStatistics->syllableCount("platelike")); $this->assertEquals(2, $this->TextStatistics->syllableCount("platinum")); $this->assertEquals(1, $this->TextStatistics->syllableCount("platte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("plebeians")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pleiad")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pleiads")); $this->assertEquals(2, $this->TextStatistics->syllableCount("plenmeer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("plouffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("plourde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pm")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pneumonia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poage")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pocius")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poem")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poems")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poeschl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("poetic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("poetry")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poets")); $this->assertEquals(3, $this->TextStatistics->syllableCount("poggioli")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pogue")); $this->assertEquals(4, $this->TextStatistics->syllableCount("poinsettia")); $this->assertEquals(4, $this->TextStatistics->syllableCount("poinsettias")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pointe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poitier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pokeweed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("polecat")); $this->assertEquals(2, $this->TextStatistics->syllableCount("polecats")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poleward")); $this->assertEquals(3, $this->TextStatistics->syllableCount("policeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("policemen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("politte")); $this->assertEquals(5, $this->TextStatistics->syllableCount("polytheism")); $this->assertEquals(5, $this->TextStatistics->syllableCount("polytheistic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("polyurethane")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pomrenze")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ponce")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ponte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pontiac")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pontiacs")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pontikes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pontious")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pooches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("popejoy")); $this->assertEquals(5, $this->TextStatistics->syllableCount("popieluszko")); $this->assertEquals(4, $this->TextStatistics->syllableCount("popolare")); $this->assertEquals(1, $this->TextStatistics->syllableCount("poppe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("poppea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("poquette")); $this->assertEquals(3, $this->TextStatistics->syllableCount("portales")); $this->assertEquals(1, $this->TextStatistics->syllableCount("porte")); $this->assertEquals(5, $this->TextStatistics->syllableCount("possiblity")); $this->assertEquals(4, $this->TextStatistics->syllableCount("postindustrial")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pottebaum")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pouches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("poudrier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pourciau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("powercise")); $this->assertEquals(3, $this->TextStatistics->syllableCount("powerfully")); $this->assertEquals(4, $this->TextStatistics->syllableCount("powerpc")); $this->assertEquals(4, $this->TextStatistics->syllableCount("powerpcs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("powertrain")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ppm")); $this->assertEquals(3, $this->TextStatistics->syllableCount("practically")); $this->assertEquals(1, $this->TextStatistics->syllableCount("prague")); $this->assertEquals(3, $this->TextStatistics->syllableCount("praiseworthy")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pratte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("prayer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("prayers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prechtl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preciado")); $this->assertEquals(2, $this->TextStatistics->syllableCount("premier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("premiers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prentnieks")); $this->assertEquals(3, $this->TextStatistics->syllableCount("preponderance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prescience")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prescient")); $this->assertEquals(2, $this->TextStatistics->syllableCount("preserved")); $this->assertEquals(3, $this->TextStatistics->syllableCount("presler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("presse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pressler")); $this->assertEquals(5, $this->TextStatistics->syllableCount("prestigiacomo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prestigious")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pretense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("pretentious")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prevatte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pridemore")); $this->assertEquals(1, $this->TextStatistics->syllableCount("priest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("priester")); $this->assertEquals(2, $this->TextStatistics->syllableCount("priestly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prieta")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prieto")); $this->assertEquals(2, $this->TextStatistics->syllableCount("primebank")); $this->assertEquals(2, $this->TextStatistics->syllableCount("primeco")); $this->assertEquals(2, $this->TextStatistics->syllableCount("primenews")); $this->assertEquals(2, $this->TextStatistics->syllableCount("primestar")); $this->assertEquals(2, $this->TextStatistics->syllableCount("primetime")); $this->assertEquals(2, $this->TextStatistics->syllableCount("princeton")); $this->assertEquals(3, $this->TextStatistics->syllableCount("principally")); $this->assertEquals(3, $this->TextStatistics->syllableCount("principe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prindl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("priore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pritzl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("privileges")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prizewinner")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prizewinners")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prizewinning")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prizm")); $this->assertEquals(3, $this->TextStatistics->syllableCount("procreate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("procreates")); $this->assertEquals(4, $this->TextStatistics->syllableCount("procreation")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prodigious")); $this->assertEquals(4, $this->TextStatistics->syllableCount("prodigiously")); $this->assertEquals(2, $this->TextStatistics->syllableCount("proia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("proj")); $this->assertEquals(4, $this->TextStatistics->syllableCount("prolifically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("prolinea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prologue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("promiscuous")); $this->assertEquals(3, $this->TextStatistics->syllableCount("propitious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prosaic")); $this->assertEquals(2, $this->TextStatistics->syllableCount("proskauer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("proske")); $this->assertEquals(3, $this->TextStatistics->syllableCount("protean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("protease")); $this->assertEquals(3, $this->TextStatistics->syllableCount("protege")); $this->assertEquals(4, $this->TextStatistics->syllableCount("protozoan")); $this->assertEquals(4, $this->TextStatistics->syllableCount("protozoans")); $this->assertEquals(3, $this->TextStatistics->syllableCount("provincetown")); $this->assertEquals(3, $this->TextStatistics->syllableCount("provine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("prowse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prudente")); $this->assertEquals(5, $this->TextStatistics->syllableCount("prudentialbache")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pruitt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("prunedale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("prurient")); $this->assertEquals(2, $this->TextStatistics->syllableCount("pryor")); $this->assertEquals(3, $this->TextStatistics->syllableCount("przybyl")); $this->assertEquals(4, $this->TextStatistics->syllableCount("przybyla")); $this->assertEquals(4, $this->TextStatistics->syllableCount("przybylski")); $this->assertEquals(3, $this->TextStatistics->syllableCount("przybysz")); $this->assertEquals(4, $this->TextStatistics->syllableCount("przywara")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pseudoscience")); $this->assertEquals(6, $this->TextStatistics->syllableCount("pseudoscientific")); $this->assertEquals(2, $this->TextStatistics->syllableCount("psyche")); $this->assertEquals(2, $this->TextStatistics->syllableCount("psyches")); $this->assertEquals(6, $this->TextStatistics->syllableCount("psychoanalysis")); $this->assertEquals(5, $this->TextStatistics->syllableCount("psychoanalyst")); $this->assertEquals(6, $this->TextStatistics->syllableCount("psychoanalytic")); $this->assertEquals(5, $this->TextStatistics->syllableCount("psychologically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ptolemaic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pucciarelli")); $this->assertEquals(1, $this->TextStatistics->syllableCount("puente")); $this->assertEquals(4, $this->TextStatistics->syllableCount("pugliese")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pulse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("punches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("purebreds")); $this->assertEquals(5, $this->TextStatistics->syllableCount("puritanisms")); $this->assertEquals(2, $this->TextStatistics->syllableCount("puzzler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("pylant")); $this->assertEquals(2, $this->TextStatistics->syllableCount("qiao")); $this->assertEquals(2, $this->TextStatistics->syllableCount("qiaotou")); $this->assertEquals(2, $this->TextStatistics->syllableCount("qmax")); $this->assertEquals(4, $this->TextStatistics->syllableCount("quadrupling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("quagmire")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quarles")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quarre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("quassia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("quattrone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("quealy")); $this->assertEquals(3, $this->TextStatistics->syllableCount("queasiness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("queasy")); $this->assertEquals(1, $this->TextStatistics->syllableCount("queen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("queena")); $this->assertEquals(2, $this->TextStatistics->syllableCount("queenan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("queener")); $this->assertEquals(2, $this->TextStatistics->syllableCount("queenfish")); $this->assertEquals(2, $this->TextStatistics->syllableCount("queenie")); $this->assertEquals(1, $this->TextStatistics->syllableCount("queens")); $this->assertEquals(3, $this->TextStatistics->syllableCount("queensberry")); $this->assertEquals(2, $this->TextStatistics->syllableCount("queensland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("queensway")); $this->assertEquals(1, $this->TextStatistics->syllableCount("queer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("queerer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("queue")); $this->assertEquals(1, $this->TextStatistics->syllableCount("queues")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quiett")); $this->assertEquals(2, $this->TextStatistics->syllableCount("quiles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("quillian")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quilmes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("quirion")); $this->assertEquals(1, $this->TextStatistics->syllableCount("quirke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("quixote")); $this->assertEquals(3, $this->TextStatistics->syllableCount("racamier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("racehorse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("racetrack")); $this->assertEquals(2, $this->TextStatistics->syllableCount("racetracks")); $this->assertEquals(2, $this->TextStatistics->syllableCount("raceway")); $this->assertEquals(3, $this->TextStatistics->syllableCount("racioppi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rackliffe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("radcliffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("radde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rademaker")); $this->assertEquals(2, $this->TextStatistics->syllableCount("radiance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("radically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("radioed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("radler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rafael")); $this->assertEquals(4, $this->TextStatistics->syllableCount("raffaele")); $this->assertEquals(4, $this->TextStatistics->syllableCount("raffaelli")); $this->assertEquals(2, $this->TextStatistics->syllableCount("raffety")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rafuse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ragone")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ragonese")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rai")); $this->assertEquals(2, $this->TextStatistics->syllableCount("raia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rainier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rakestraw")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rambler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ramblers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rambunctious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ramires")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ranches")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ranieri")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ranke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rapeseed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("raphael")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rappe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("raschke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rasia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ratcliffe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rateliff")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ratepayer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ratepayers")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rathje")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rathke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ratier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ratliffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ratte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rauls")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rawles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rb")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reaches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reacquire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reacquired")); $this->assertEquals(2, $this->TextStatistics->syllableCount("react")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reacted")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reacting")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reaction")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reactivate")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reactivated")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reactivating")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reactive")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reactivity")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reactor")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reactors")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reacts")); $this->assertEquals(3, $this->TextStatistics->syllableCount("readjust")); $this->assertEquals(4, $this->TextStatistics->syllableCount("readjusted")); $this->assertEquals(4, $this->TextStatistics->syllableCount("readjusting")); $this->assertEquals(4, $this->TextStatistics->syllableCount("readjustment")); $this->assertEquals(4, $this->TextStatistics->syllableCount("readjustments")); $this->assertEquals(4, $this->TextStatistics->syllableCount("readmitted")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reaffiliation")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reaffirm")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reaffirmation")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reaffirmed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reaffirming")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reaffirms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reagents")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reappear")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reappearance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reappeared")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reappears")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reapply")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reappoint")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reappointed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reappointment")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reapportionment")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reappraisal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reappraise")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rearm")); $this->assertEquals(4, $this->TextStatistics->syllableCount("rearmament")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rearrange")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rearranged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("rearranging")); $this->assertEquals(4, $this->TextStatistics->syllableCount("rearrested")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reassemble")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reassembled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reassert")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reasserted")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reasserting")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reassertion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reasserts")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reassess")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reassessed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reassessing")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reassessment")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reassign")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reassigned")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reassigning")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reassignment")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reassignments")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reassume")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reassumed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reassurance")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reassurances")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reassure")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reassured")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reassures")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reassuring")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reassuringly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reatta")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reawakened")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reawakening")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rebellious")); $this->assertEquals(2, $this->TextStatistics->syllableCount("recharged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("recine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("recipe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("recipes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("recipient")); $this->assertEquals(4, $this->TextStatistics->syllableCount("recipients")); $this->assertEquals(3, $this->TextStatistics->syllableCount("recompense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("recore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("recreate")); $this->assertEquals(4, $this->TextStatistics->syllableCount("recreated")); $this->assertEquals(3, $this->TextStatistics->syllableCount("recreates")); $this->assertEquals(4, $this->TextStatistics->syllableCount("recreating")); $this->assertEquals(4, $this->TextStatistics->syllableCount("recreation")); $this->assertEquals(5, $this->TextStatistics->syllableCount("recreational")); $this->assertEquals(4, $this->TextStatistics->syllableCount("recycling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("redactes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("rediscovery")); $this->assertEquals(4, $this->TextStatistics->syllableCount("redlinger")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reelected")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reelection")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reemergence")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reemployment")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reenacted")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reenactment")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reenactments")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reenacts")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reengineering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reenter")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reentering")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reentry")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reestablish")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reestablishing")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reevaluate")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reevaluating")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reevaluation")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reexamination")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reexamine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reexamined")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reexamining")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reexport")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reexports")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refenes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reflagged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refuel")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refueled")); $this->assertEquals(4, $this->TextStatistics->syllableCount("refueling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refusenik")); $this->assertEquals(3, $this->TextStatistics->syllableCount("refuseniks")); $this->assertEquals(3, $this->TextStatistics->syllableCount("regalia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("reher")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rehired")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reichart")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reichl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reichling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reignite")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reignited")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reigniting")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reimagine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reimburse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reimbursed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reimburses")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reimbursing")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reimpose")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reimposing")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reimposition")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reina")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reincarnated")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reincarnation")); $this->assertEquals(1, $this->TextStatistics->syllableCount("reincke")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reincorporate")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reincorporating")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reincorporation")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reindeer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reindl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reinecke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reinforce")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reinforced")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinforces")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinforcing")); $this->assertEquals(1, $this->TextStatistics->syllableCount("reinke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinspection")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reinstate")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinstated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinstating")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinstitute")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reinstituted")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reinstituting")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinsurance")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reinsure")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reinsured")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinsurer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinsurers")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reintegrated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinterpret")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reinterpretation")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reinterpreted")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reinterpreting")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reintroduce")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reintroduced")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reintroduces")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reintroducing")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reintroduction")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reinvent")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinvented")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinventing")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reinvest")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinvested")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinvesting")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reinvestment")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reinvests")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reinvigorate")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reinvigorated")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reinvigorating")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reinvigoration")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reischauer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reish")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reissue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reissued")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reissuing")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reister")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reitano")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reiterate")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reiterated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reiterates")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reiterating")); $this->assertEquals(5, $this->TextStatistics->syllableCount("reiteration")); $this->assertEquals(2, $this->TextStatistics->syllableCount("relapse")); $this->assertEquals(5, $this->TextStatistics->syllableCount("religione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("religious")); $this->assertEquals(4, $this->TextStatistics->syllableCount("religiously")); $this->assertEquals(3, $this->TextStatistics->syllableCount("relying")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reminisces")); $this->assertEquals(4, $this->TextStatistics->syllableCount("remlinger")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rempe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("renate")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rende")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rene")); $this->assertEquals(5, $this->TextStatistics->syllableCount("renegotiate")); $this->assertEquals(6, $this->TextStatistics->syllableCount("renegotiated")); $this->assertEquals(6, $this->TextStatistics->syllableCount("renegotiating")); $this->assertEquals(6, $this->TextStatistics->syllableCount("renegotiation")); $this->assertEquals(6, $this->TextStatistics->syllableCount("renegotiations")); $this->assertEquals(2, $this->TextStatistics->syllableCount("renfred")); $this->assertEquals(3, $this->TextStatistics->syllableCount("renschler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rensselaer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reorient")); $this->assertEquals(4, $this->TextStatistics->syllableCount("repetitious")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reponse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("repulse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("require")); $this->assertEquals(3, $this->TextStatistics->syllableCount("required")); $this->assertEquals(3, $this->TextStatistics->syllableCount("requires")); $this->assertEquals(4, $this->TextStatistics->syllableCount("requiring")); $this->assertEquals(1, $this->TextStatistics->syllableCount("reschke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("researched")); $this->assertEquals(2, $this->TextStatistics->syllableCount("resendes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reserved")); $this->assertEquals(4, $this->TextStatistics->syllableCount("resiliency")); $this->assertEquals(3, $this->TextStatistics->syllableCount("resilient")); $this->assertEquals(4, $this->TextStatistics->syllableCount("resourcefulness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("response")); $this->assertEquals(3, $this->TextStatistics->syllableCount("resseguie")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ressler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("restaino")); $this->assertEquals(5, $this->TextStatistics->syllableCount("retaliatory")); $this->assertEquals(3, $this->TextStatistics->syllableCount("retemeyer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("retroactive")); $this->assertEquals(5, $this->TextStatistics->syllableCount("retroactively")); $this->assertEquals(6, $this->TextStatistics->syllableCount("retroactivity")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reum")); $this->assertEquals(6, $this->TextStatistics->syllableCount("reunification")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reunified")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reunify")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reunion")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reunions")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reunite")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reunited")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reuniting")); $this->assertEquals(4, $this->TextStatistics->syllableCount("reusable")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reuse")); $this->assertEquals(6, $this->TextStatistics->syllableCount("revaluations")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reveles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("reveres")); $this->assertEquals(8, $this->TextStatistics->syllableCount("revolucionario")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rewire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rewired")); $this->assertEquals(4, $this->TextStatistics->syllableCount("rewiring")); $this->assertEquals(2, $this->TextStatistics->syllableCount("reyes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhea")); $this->assertEquals(4, $this->TextStatistics->syllableCount("rhetorically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhinehardt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhinehart")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhineland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhineman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhinesmith")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhinestone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhinestones")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhodanthe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rhythmically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rhythms")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rials")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ricciardelli")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ricciardi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ricciuti")); $this->assertEquals(3, $this->TextStatistics->syllableCount("richelieu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("riches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ricke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ricocheted")); $this->assertEquals(6, $this->TextStatistics->syllableCount("ricostruzione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rideout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ridgecrest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ridgefield")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ridgeway")); $this->assertEquals(1, $this->TextStatistics->syllableCount("riecke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("riedl")); $this->assertEquals(4, $this->TextStatistics->syllableCount("riedlinger")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rietveld")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rietz")); $this->assertEquals(1, $this->TextStatistics->syllableCount("riffe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rigler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rigueur")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rijn")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rinehardt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rinehart")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rinehimer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ringler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ringuette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rinke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rinse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("riordan")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rioux")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ripke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rippe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rissler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("riviera")); $this->assertEquals(3, $this->TextStatistics->syllableCount("riviere")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rivieres")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roaches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("roanoke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("roarke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("robare")); $this->assertEquals(1, $this->TextStatistics->syllableCount("robbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rocke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rocque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rodarte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roderick")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rodeway")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rodine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rodrigue")); $this->assertEquals(1, $this->TextStatistics->syllableCount("roebke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roedl")); $this->assertEquals(1, $this->TextStatistics->syllableCount("roelke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("roepke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("roesler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("roethler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("roever")); $this->assertEquals(1, $this->TextStatistics->syllableCount("roffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rogue")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rogues")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rohde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rohweder")); $this->assertEquals(3, $this->TextStatistics->syllableCount("roleplaying")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rolfe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rolfes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("romesburg")); $this->assertEquals(3, $this->TextStatistics->syllableCount("romine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("roque")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roquemore")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rorke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roseboom")); $this->assertEquals(3, $this->TextStatistics->syllableCount("roseboro")); $this->assertEquals(3, $this->TextStatistics->syllableCount("roseborough")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosebrock")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosebrook")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosebrough")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosebush")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosecrans")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosekrans")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roseland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roselawn")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roseline")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roseman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rosemarie")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rosemary")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosemead")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rosemeyer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosemond")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosemont")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosenau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosevear")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosewicz")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rosewood")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roshier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rosine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ROTC")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rothmeier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rottler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rouillard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("roukema")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rourke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rouyn")); $this->assertEquals(5, $this->TextStatistics->syllableCount("rovaniemi")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rowles")); $this->assertEquals(1, $this->TextStatistics->syllableCount("rowse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rpm")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rueda")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ruella")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ruhnke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ruin")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ruined")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ruining")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ruinous")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ruins")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ruis")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ruiz")); $this->assertEquals(2, $this->TextStatistics->syllableCount("rulebook")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rulemaking")); $this->assertEquals(1, $this->TextStatistics->syllableCount("runde")); $this->assertEquals(1, $this->TextStatistics->syllableCount("runte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ruocco")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ruoff")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ruotolo")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ruppe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rustlers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rwanda")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rwandan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rwandans")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rwandese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ryobi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ryohei")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ryon")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ryuzo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rzasa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("rzepka")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sabatine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("saccone")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sachse")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sacrilegious")); $this->assertEquals(2, $this->TextStatistics->syllableCount("safecard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("safeco")); $this->assertEquals(2, $this->TextStatistics->syllableCount("safeguard")); $this->assertEquals(3, $this->TextStatistics->syllableCount("safeguarding")); $this->assertEquals(2, $this->TextStatistics->syllableCount("safeguards")); $this->assertEquals(3, $this->TextStatistics->syllableCount("safekeeping")); $this->assertEquals(2, $this->TextStatistics->syllableCount("safety")); $this->assertEquals(2, $this->TextStatistics->syllableCount("safeway")); $this->assertEquals(2, $this->TextStatistics->syllableCount("safier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sagebrush")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sagraves")); $this->assertEquals(2, $this->TextStatistics->syllableCount("saia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("saif")); $this->assertEquals(4, $this->TextStatistics->syllableCount("saitama")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sakai")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sakau")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sakigake")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sakurai")); $this->assertEquals(2, $this->TextStatistics->syllableCount("salesman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("salesmanship")); $this->assertEquals(2, $this->TextStatistics->syllableCount("salesmen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("salespeople")); $this->assertEquals(3, $this->TextStatistics->syllableCount("salesperson")); $this->assertEquals(3, $this->TextStatistics->syllableCount("salisbury")); $this->assertEquals(3, $this->TextStatistics->syllableCount("salome")); $this->assertEquals(4, $this->TextStatistics->syllableCount("salomone")); $this->assertEquals(4, $this->TextStatistics->syllableCount("salvadore")); $this->assertEquals(4, $this->TextStatistics->syllableCount("salvatore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("salzhauer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("samuela")); $this->assertEquals(3, $this->TextStatistics->syllableCount("samuels")); $this->assertEquals(4, $this->TextStatistics->syllableCount("samuelson")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sanches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sandbagged")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sande")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sandwiches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sansui")); $this->assertEquals(4, $this->TextStatistics->syllableCount("santacroce")); $this->assertEquals(2, $this->TextStatistics->syllableCount("santerre")); $this->assertEquals(4, $this->TextStatistics->syllableCount("santiago")); $this->assertEquals(3, $this->TextStatistics->syllableCount("santone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("santore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sanzone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("saone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sapiens")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sapone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sapphire")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sarcastically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sarine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sarles")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sassone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("satiny")); $this->assertEquals(3, $this->TextStatistics->syllableCount("satire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("satires")); $this->assertEquals(5, $this->TextStatistics->syllableCount("satisfactorily")); $this->assertEquals(4, $this->TextStatistics->syllableCount("satisfactory")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sattler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("saucepan")); $this->assertEquals(2, $this->TextStatistics->syllableCount("saute")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sauter")); $this->assertEquals(4, $this->TextStatistics->syllableCount("savarese")); $this->assertEquals(2, $this->TextStatistics->syllableCount("savior")); $this->assertEquals(2, $this->TextStatistics->syllableCount("saviors")); $this->assertEquals(3, $this->TextStatistics->syllableCount("savoia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("savoie")); $this->assertEquals(2, $this->TextStatistics->syllableCount("savr")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sawyer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sawyers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sayed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sbf")); $this->assertEquals(4, $this->TextStatistics->syllableCount("scaglione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scalese")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scapegoat")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scapegoating")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scapegoats")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scarpone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schadler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schaedler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schaefers")); $this->assertEquals(1, $this->TextStatistics->syllableCount("scharfe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schaufler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schedler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scheidler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scheufler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scheunemann")); $this->assertEquals(4, $this->TextStatistics->syllableCount("schiavone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schickler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schickling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schielke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schildknecht")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schilke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schimke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schinke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schisler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schisms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schloesser")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schmidl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schmutzler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schoene")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schoening")); $this->assertEquals(1, $this->TextStatistics->syllableCount("scholtes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("scholze")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schoneman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schoppe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schouten")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schreder")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schreyer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schroedl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schubring")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schuelke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schuerman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schuermann")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schuessler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schuette")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schuetze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schulte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schultes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schultze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schulze")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schuneman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schussler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schutte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schuttler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schwalbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schwanke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schwantes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schwarze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schwebke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schweder")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schweer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schweers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schwegler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("schwendeman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schwenke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schweppe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("schweppes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("schwoerer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sciacca")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scialdone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sciandra")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scianna")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sciara")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sciarrino")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sciclone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("science")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sciences")); $this->assertEquals(4, $this->TextStatistics->syllableCount("scientific")); $this->assertEquals(6, $this->TextStatistics->syllableCount("scientifically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("scientifics")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scientist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scientists")); $this->assertEquals(5, $this->TextStatistics->syllableCount("scientology")); $this->assertEquals(4, $this->TextStatistics->syllableCount("scintilore")); $this->assertEquals(4, $this->TextStatistics->syllableCount("scipione")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scohier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scoreboard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scorecard")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scorekeepers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scour")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scoured")); $this->assertEquals(3, $this->TextStatistics->syllableCount("scouring")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scours")); $this->assertEquals(2, $this->TextStatistics->syllableCount("screeches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scribblers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scrimgeour")); $this->assertEquals(2, $this->TextStatistics->syllableCount("scrivener")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sdn")); $this->assertEquals(2, $this->TextStatistics->syllableCount("se")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seabed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("searle")); $this->assertEquals(3, $this->TextStatistics->syllableCount("seattle")); $this->assertEquals(5, $this->TextStatistics->syllableCount("sebastiana")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sebastiane")); $this->assertEquals(5, $this->TextStatistics->syllableCount("sebastiani")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sechrest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sechrist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("secrest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("secrist")); $this->assertEquals(4, $this->TextStatistics->syllableCount("securites")); $this->assertEquals(3, $this->TextStatistics->syllableCount("seditious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sedore")); $this->assertEquals(1, $this->TextStatistics->syllableCount("seer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("seers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("segraves")); $this->assertEquals(3, $this->TextStatistics->syllableCount("segrest")); $this->assertEquals(1, $this->TextStatistics->syllableCount("segue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seidl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("seifried")); $this->assertEquals(3, $this->TextStatistics->syllableCount("seigler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Seiichi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sekisui")); $this->assertEquals(1, $this->TextStatistics->syllableCount("selbe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seles")); $this->assertEquals(1, $this->TextStatistics->syllableCount("selke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sellier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("semele")); $this->assertEquals(5, $this->TextStatistics->syllableCount("semireligious")); $this->assertEquals(2, $this->TextStatistics->syllableCount("semmler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("semones")); $this->assertEquals(4, $this->TextStatistics->syllableCount("senatore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("senior")); $this->assertEquals(4, $this->TextStatistics->syllableCount("seniority")); $this->assertEquals(3, $this->TextStatistics->syllableCount("seniornet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seniors")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sense")); $this->assertEquals(2, $this->TextStatistics->syllableCount("senseless")); $this->assertEquals(1, $this->TextStatistics->syllableCount("senske")); $this->assertEquals(1, $this->TextStatistics->syllableCount("seoul")); $this->assertEquals(2, $this->TextStatistics->syllableCount("separate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sequeira")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sequences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sequoia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sequoias")); $this->assertEquals(4, $this->TextStatistics->syllableCount("serafine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("seraphine")); $this->assertEquals(4, $this->TextStatistics->syllableCount("serenely")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sergius")); $this->assertEquals(1, $this->TextStatistics->syllableCount("serpe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("serratore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("serviceman")); $this->assertEquals(4, $this->TextStatistics->syllableCount("servicemaster")); $this->assertEquals(3, $this->TextStatistics->syllableCount("servicemen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sesame")); $this->assertEquals(2, $this->TextStatistics->syllableCount("Sese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sesler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sessler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("settlers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("seve")); $this->assertEquals(4, $this->TextStatistics->syllableCount("seventieth")); $this->assertEquals(2, $this->TextStatistics->syllableCount("several")); $this->assertEquals(3, $this->TextStatistics->syllableCount("severally")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sevier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("seyfried")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sh")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shakedown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shakedowns")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shakeout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shakespeare")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shampooed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sharecroppers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shareholder")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shareholders")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shareholding")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shareholdings")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shareware")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sharpe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sheer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sheffler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("shenandoah")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sheneman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shidler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shiffler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shiina")); $this->assertEquals(4, $this->TextStatistics->syllableCount("shiraishi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shiremanstown")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shisler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shissler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("shiu")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shoichi")); $this->assertEquals(4, $this->TextStatistics->syllableCount("shoichiro")); $this->assertEquals(1, $this->TextStatistics->syllableCount("shooed")); $this->assertEquals(1, $this->TextStatistics->syllableCount("shoppe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("shoppes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shor")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shorebird")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shoreham")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shoreward")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shoshone")); $this->assertEquals(1, $this->TextStatistics->syllableCount("shouldnt")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shoveling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shreffler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shrikelike")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shryock")); $this->assertEquals(3, $this->TextStatistics->syllableCount("shuddered")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shuey")); $this->assertEquals(2, $this->TextStatistics->syllableCount("shui")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sichuan")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sicilia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sicotte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sidetracked")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sidler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("siegecraft")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sienko")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sierra")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sierracin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sierras")); $this->assertEquals(1, $this->TextStatistics->syllableCount("siers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("siewiorek")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sigl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sigler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("signore")); $this->assertEquals(4, $this->TextStatistics->syllableCount("simione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("simler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("simpler")); $this->assertEquals(5, $this->TextStatistics->syllableCount("singaporean")); $this->assertEquals(5, $this->TextStatistics->syllableCount("singaporeans")); $this->assertEquals(3, $this->TextStatistics->syllableCount("singler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("singling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sinuous")); $this->assertEquals(2, $this->TextStatistics->syllableCount("siobhan")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sioux")); $this->assertEquals(4, $this->TextStatistics->syllableCount("siracuse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sirrine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sisemore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sisler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sistare")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sitler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sittler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sitze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sixtieth")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sizeler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sizelove")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sizemore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sizzler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("skateboard")); $this->assertEquals(3, $this->TextStatistics->syllableCount("skateboarding")); $this->assertEquals(1, $this->TextStatistics->syllableCount("skibbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("skier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("skrzypek")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sledgehammer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("slouches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("smokejumper")); $this->assertEquals(3, $this->TextStatistics->syllableCount("smokejumpers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("smokescreen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("smokestack")); $this->assertEquals(2, $this->TextStatistics->syllableCount("smokestacks")); $this->assertEquals(5, $this->TextStatistics->syllableCount("smtih")); $this->assertEquals(2, $this->TextStatistics->syllableCount("snakebites")); $this->assertEquals(2, $this->TextStatistics->syllableCount("snakelike")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sneer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sneers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("soares")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sobieski")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sociable")); $this->assertEquals(4, $this->TextStatistics->syllableCount("societa")); $this->assertEquals(4, $this->TextStatistics->syllableCount("societal")); $this->assertEquals(4, $this->TextStatistics->syllableCount("societe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("societies")); $this->assertEquals(4, $this->TextStatistics->syllableCount("society")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sociopath")); $this->assertEquals(3, $this->TextStatistics->syllableCount("socrates")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sofaer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("solares")); $this->assertEquals(2, $this->TextStatistics->syllableCount("soldier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("soldiers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("soledad")); $this->assertEquals(2, $this->TextStatistics->syllableCount("solesbee")); $this->assertEquals(4, $this->TextStatistics->syllableCount("solimine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("soloist")); $this->assertEquals(3, $this->TextStatistics->syllableCount("soloists")); $this->assertEquals(1, $this->TextStatistics->syllableCount("soltes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("somebody")); $this->assertEquals(2, $this->TextStatistics->syllableCount("someday")); $this->assertEquals(2, $this->TextStatistics->syllableCount("somehow")); $this->assertEquals(2, $this->TextStatistics->syllableCount("something")); $this->assertEquals(2, $this->TextStatistics->syllableCount("somethings")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sometime")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sometimes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("somewhat")); $this->assertEquals(2, $this->TextStatistics->syllableCount("somewhere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sonia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sooy")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sophomore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sophomores")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sosuke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("soulliere")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sour")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sourcebook")); $this->assertEquals(2, $this->TextStatistics->syllableCount("soured")); $this->assertEquals(3, $this->TextStatistics->syllableCount("souring")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sourly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sours")); $this->assertEquals(3, $this->TextStatistics->syllableCount("Sousuke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sovereign")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sovereigns")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sovereignty")); $this->assertEquals(6, $this->TextStatistics->syllableCount("sovietologists")); $this->assertEquals(3, $this->TextStatistics->syllableCount("soviets")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sowle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sowles")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spaceballs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spacebands")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spacecraft")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spacelink")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spacenet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spacesuit")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spadework")); $this->assertEquals(4, $this->TextStatistics->syllableCount("spagnuolo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("spangler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spaniard")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spaniards")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spanier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spaniol")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sparkes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spasms")); $this->assertEquals(3, $this->TextStatistics->syllableCount("speciale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("specialities")); $this->assertEquals(5, $this->TextStatistics->syllableCount("speciality")); $this->assertEquals(4, $this->TextStatistics->syllableCount("specifically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("speeches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("speer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("spengler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("speziale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spieth")); $this->assertEquals(1, $this->TextStatistics->syllableCount("spilde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("spinale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("spindler")); $this->assertEquals(5, $this->TextStatistics->syllableCount("spiritualism")); $this->assertEquals(3, $this->TextStatistics->syllableCount("spitale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spittler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spokeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spokesman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spokesmen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("spokespeople")); $this->assertEquals(3, $this->TextStatistics->syllableCount("spokesperson")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sponsler")); $this->assertEquals(5, $this->TextStatistics->syllableCount("spontaneity")); $this->assertEquals(2, $this->TextStatistics->syllableCount("spoonemore")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sporadically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sporophyte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sporophytes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("spracklen")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sprague")); $this->assertEquals(1, $this->TextStatistics->syllableCount("spruiell")); $this->assertEquals(1, $this->TextStatistics->syllableCount("squeak")); $this->assertEquals(1, $this->TextStatistics->syllableCount("squeaked")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squeaker")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squeakers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squeaking")); $this->assertEquals(1, $this->TextStatistics->syllableCount("squeaks")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squeaky")); $this->assertEquals(1, $this->TextStatistics->syllableCount("squeal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squealing")); $this->assertEquals(1, $this->TextStatistics->syllableCount("squeals")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squeamish")); $this->assertEquals(3, $this->TextStatistics->syllableCount("squeamishness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squeegee")); $this->assertEquals(1, $this->TextStatistics->syllableCount("squeeze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("squeezed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squeezing")); $this->assertEquals(1, $this->TextStatistics->syllableCount("squiers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("squires")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sr")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stablest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("staebler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("staehle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stagecoach")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stagecraft")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stagehands")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stahnke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stai")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stakeholder")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stakeholders")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stakeout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stakeouts")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stalemate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stalemated")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stangl")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stangler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stanke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("stanzione")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stapler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("staplers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stapling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("starace")); $this->assertEquals(1, $this->TextStatistics->syllableCount("starke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("starkes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("starpointe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("statecraft")); $this->assertEquals(2, $this->TextStatistics->syllableCount("statehood")); $this->assertEquals(2, $this->TextStatistics->syllableCount("statehouse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stateroom")); $this->assertEquals(2, $this->TextStatistics->syllableCount("statesman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("statesmanship")); $this->assertEquals(2, $this->TextStatistics->syllableCount("statesmen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stateswest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("statewide")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stechschulte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("steer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("steers")); $this->assertEquals(1, $this->TextStatistics->syllableCount("steffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("steffes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("steffler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stefl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stegeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stegemann")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stegemeier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("steidl")); $this->assertEquals(1, $this->TextStatistics->syllableCount("steinke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stemmler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stepien")); $this->assertEquals(1, $this->TextStatistics->syllableCount("steppe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("steppes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stettler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("steuart")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stickler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stiegemeier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stiffler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stineman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stiteler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stobbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stocke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stoeltze")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stoever")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoia")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoic")); $this->assertEquals(4, $this->TextStatistics->syllableCount("stoicism")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoics")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stokke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stolpe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stolte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stolze")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoneback")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoneberg")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stoneberger")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stoneburner")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stonecipher")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stonecutters")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoneham")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stonehenge")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stonehill")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stonehocker")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stonehouse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoneking")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoneman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoneridge")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stonerock")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stonestreet")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stonewall")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stonewalled")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stonewalling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stoneware")); $this->assertEquals(3, $this->TextStatistics->syllableCount("storagetek")); $this->assertEquals(2, $this->TextStatistics->syllableCount("storefront")); $this->assertEquals(2, $this->TextStatistics->syllableCount("storefronts")); $this->assertEquals(2, $this->TextStatistics->syllableCount("storehouse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("storekeepers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("storeroom")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stormes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stracke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stragglers")); $this->assertEquals(1, $this->TextStatistics->syllableCount("strande")); $this->assertEquals(3, $this->TextStatistics->syllableCount("strangling")); $this->assertEquals(4, $this->TextStatistics->syllableCount("strategically")); $this->assertEquals(1, $this->TextStatistics->syllableCount("strehle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("striar")); $this->assertEquals(4, $this->TextStatistics->syllableCount("stribling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("stricklen")); $this->assertEquals(2, $this->TextStatistics->syllableCount("strieter")); $this->assertEquals(3, $this->TextStatistics->syllableCount("strikebreakers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("strikeout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("strikeouts")); $this->assertEquals(1, $this->TextStatistics->syllableCount("strubbe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("strzelecki")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stubbe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stucke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("stumpe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("stutesman")); $this->assertEquals(4, $this->TextStatistics->syllableCount("stylistically")); $this->assertEquals(1, $this->TextStatistics->syllableCount("styron")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suarez")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suasion")); $this->assertEquals(1, $this->TextStatistics->syllableCount("suave")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suazo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("submerged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("subnotebook")); $this->assertEquals(4, $this->TextStatistics->syllableCount("subservience")); $this->assertEquals(4, $this->TextStatistics->syllableCount("subservient")); $this->assertEquals(4, $this->TextStatistics->syllableCount("substantiate")); $this->assertEquals(5, $this->TextStatistics->syllableCount("substantiated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("substantiates")); $this->assertEquals(5, $this->TextStatistics->syllableCount("substantiation")); $this->assertEquals(5, $this->TextStatistics->syllableCount("subterranean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("subtler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("subtly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sudafed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sudler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suey")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suez")); $this->assertEquals(1, $this->TextStatistics->syllableCount("suhre")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sui")); $this->assertEquals(4, $this->TextStatistics->syllableCount("suicidal")); $this->assertEquals(3, $this->TextStatistics->syllableCount("suicide")); $this->assertEquals(3, $this->TextStatistics->syllableCount("suicides")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sumptuous")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sunde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sundial")); $this->assertEquals(3, $this->TextStatistics->syllableCount("sunobe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("supercharged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("superfamily")); $this->assertEquals(6, $this->TextStatistics->syllableCount("superfluidity")); $this->assertEquals(3, $this->TextStatistics->syllableCount("superfluous")); $this->assertEquals(4, $this->TextStatistics->syllableCount("superstitious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("superx")); $this->assertEquals(1, $this->TextStatistics->syllableCount("suppes")); $this->assertEquals(4, $this->TextStatistics->syllableCount("supremely")); $this->assertEquals(3, $this->TextStatistics->syllableCount("supremes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("surace")); $this->assertEquals(4, $this->TextStatistics->syllableCount("surreptitious")); $this->assertEquals(5, $this->TextStatistics->syllableCount("surreptitiously")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suspense")); $this->assertEquals(3, $this->TextStatistics->syllableCount("suspenseful")); $this->assertEquals(2, $this->TextStatistics->syllableCount("sutcliffe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("suttmeier")); $this->assertEquals(3, $this->TextStatistics->syllableCount("suu")); $this->assertEquals(1, $this->TextStatistics->syllableCount("svelte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("swanke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("sweers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("swindler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("swinehart")); $this->assertEquals(3, $this->TextStatistics->syllableCount("swingler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("swoveland")); $this->assertEquals(3, $this->TextStatistics->syllableCount("synagogue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("synagogues")); $this->assertEquals(4, $this->TextStatistics->syllableCount("synthetically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("sypniewski")); $this->assertEquals(5, $this->TextStatistics->syllableCount("systematically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("systemically")); $this->assertEquals(1, $this->TextStatistics->syllableCount("taaffe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tabares")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tacke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tadeusz")); $this->assertEquals(1, $this->TextStatistics->syllableCount("taffe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("taflinger")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tagliaferri")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tague")); $this->assertEquals(3, $this->TextStatistics->syllableCount("taira")); $this->assertEquals(3, $this->TextStatistics->syllableCount("takao")); $this->assertEquals(2, $this->TextStatistics->syllableCount("takecare")); $this->assertEquals(2, $this->TextStatistics->syllableCount("takeout")); $this->assertEquals(4, $this->TextStatistics->syllableCount("takeuchi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tamales")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tanabe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tangeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tangiers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tania")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tanke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tannehill")); $this->assertEquals(4, $this->TextStatistics->syllableCount("taormina")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tappe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tarleton")); $this->assertEquals(5, $this->TextStatistics->syllableCount("tartaglione")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tarte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tassone")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tatiana")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tattler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tattooed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tavares")); $this->assertEquals(5, $this->TextStatistics->syllableCount("tavoulareas")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tb")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tbilisi")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tcas")); $this->assertEquals(2, $this->TextStatistics->syllableCount("teaches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("teague")); $this->assertEquals(2, $this->TextStatistics->syllableCount("teate")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tebbe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tebuthiuron")); $this->assertEquals(2, $this->TextStatistics->syllableCount("technique")); $this->assertEquals(2, $this->TextStatistics->syllableCount("techniques")); $this->assertEquals(1, $this->TextStatistics->syllableCount("teer")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tele")); $this->assertEquals(4, $this->TextStatistics->syllableCount("teleconference")); $this->assertEquals(5, $this->TextStatistics->syllableCount("teleconferencing")); $this->assertEquals(5, $this->TextStatistics->syllableCount("telemecanique")); $this->assertEquals(4, $this->TextStatistics->syllableCount("telephoniques")); $this->assertEquals(5, $this->TextStatistics->syllableCount("telesciences")); $this->assertEquals(3, $this->TextStatistics->syllableCount("temperament")); $this->assertEquals(4, $this->TextStatistics->syllableCount("temperamental")); $this->assertEquals(5, $this->TextStatistics->syllableCount("temperamentally")); $this->assertEquals(3, $this->TextStatistics->syllableCount("temperaments")); $this->assertEquals(2, $this->TextStatistics->syllableCount("temperate")); $this->assertEquals(3, $this->TextStatistics->syllableCount("temperature")); $this->assertEquals(3, $this->TextStatistics->syllableCount("temperatures")); $this->assertEquals(3, $this->TextStatistics->syllableCount("templer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tendentious")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tenn")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tennessean")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tense")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tensely")); $this->assertEquals(2, $this->TextStatistics->syllableCount("termeer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("terrien")); $this->assertEquals(4, $this->TextStatistics->syllableCount("terrifically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tesler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tesmer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tessitore")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tessler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tetsuo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("th")); $this->assertEquals(3, $this->TextStatistics->syllableCount("thaddeus")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thalia")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tharpe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thatll")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theater")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theaters")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theatre")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theatres")); $this->assertEquals(4, $this->TextStatistics->syllableCount("theatrical")); $this->assertEquals(6, $this->TextStatistics->syllableCount("theatricality")); $this->assertEquals(5, $this->TextStatistics->syllableCount("theatrically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theism")); $this->assertEquals(4, $this->TextStatistics->syllableCount("thematically")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thenceforth")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thereby")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thered")); $this->assertEquals(2, $this->TextStatistics->syllableCount("therefore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("theriault")); $this->assertEquals(5, $this->TextStatistics->syllableCount("thermonuclear")); $this->assertEquals(3, $this->TextStatistics->syllableCount("therriault")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thielemann")); $this->assertEquals(1, $this->TextStatistics->syllableCount("thielke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("thirtieth")); $this->assertEquals(4, $this->TextStatistics->syllableCount("thirtysomething")); $this->assertEquals(2, $this->TextStatistics->syllableCount("thoene")); $this->assertEquals(4, $this->TextStatistics->syllableCount("thomasine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("thorpe")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tiananmen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tianjin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tiano")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tiara")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ticklish")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tidewater")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tiedeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tiedemann")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tiers")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tietje")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tietmeyer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tietze")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tigue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tijuana")); $this->assertEquals(2, $this->TextStatistics->syllableCount("timeframe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("timeliness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("timeplex")); $this->assertEquals(2, $this->TextStatistics->syllableCount("timeshare")); $this->assertEquals(3, $this->TextStatistics->syllableCount("timetable")); $this->assertEquals(3, $this->TextStatistics->syllableCount("timetables")); $this->assertEquals(5, $this->TextStatistics->syllableCount("timisoara")); $this->assertEquals(4, $this->TextStatistics->syllableCount("timothea")); $this->assertEquals(1, $this->TextStatistics->syllableCount("timpe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("timpone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tingler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tingling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tinkler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tinkling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tipler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tire")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tired")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tireless")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tiremaker")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tires")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tischler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("titania")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tocqueville")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toddler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toddlers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toews")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toffler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tofte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tokuo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tokyo")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tomaino")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tomasine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tongue")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tongued")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tongues")); $this->assertEquals(2, $this->TextStatistics->syllableCount("toniest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tonnesen")); $this->assertEquals(1, $this->TextStatistics->syllableCount("torme")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tornabene")); $this->assertEquals(4, $this->TextStatistics->syllableCount("tornatore")); $this->assertEquals(1, $this->TextStatistics->syllableCount("torque")); $this->assertEquals(1, $this->TextStatistics->syllableCount("torre")); $this->assertEquals(2, $this->TextStatistics->syllableCount("torturous")); $this->assertEquals(1, $this->TextStatistics->syllableCount("totzke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("touareg")); $this->assertEquals(2, $this->TextStatistics->syllableCount("touches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tousled")); $this->assertEquals(1, $this->TextStatistics->syllableCount("towle")); $this->assertEquals(1, $this->TextStatistics->syllableCount("towne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("townes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("trachea")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trademark")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trademarked")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trademarks")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tradesmen")); $this->assertEquals(4, $this->TextStatistics->syllableCount("traditionalists")); $this->assertEquals(1, $this->TextStatistics->syllableCount("traer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tragically")); $this->assertEquals(1, $this->TextStatistics->syllableCount("traipse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tramiel")); $this->assertEquals(1, $this->TextStatistics->syllableCount("trampe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tranches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("transience")); $this->assertEquals(3, $this->TextStatistics->syllableCount("transients")); $this->assertEquals(5, $this->TextStatistics->syllableCount("transoceanic")); $this->assertEquals(3, $this->TextStatistics->syllableCount("transpired")); $this->assertEquals(3, $this->TextStatistics->syllableCount("transpires")); $this->assertEquals(1, $this->TextStatistics->syllableCount("trappe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("travelogue")); $this->assertEquals(3, $this->TextStatistics->syllableCount("trbovich")); $this->assertEquals(3, $this->TextStatistics->syllableCount("treichler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("treml")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trenches")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trendier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trendiest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tressler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tribesmen")); $this->assertEquals(4, $this->TextStatistics->syllableCount("triennial")); $this->assertEquals(1, $this->TextStatistics->syllableCount("trieu")); $this->assertEquals(2, $this->TextStatistics->syllableCount("trimedyne")); $this->assertEquals(1, $this->TextStatistics->syllableCount("trimpe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("triomphe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tripling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("trippe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("trisler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("troia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("troiani")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tropea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("trousdale")); $this->assertEquals(2, $this->TextStatistics->syllableCount("truell")); $this->assertEquals(2, $this->TextStatistics->syllableCount("truest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("truex")); $this->assertEquals(3, $this->TextStatistics->syllableCount("truism")); $this->assertEquals(3, $this->TextStatistics->syllableCount("trulove")); $this->assertEquals(3, $this->TextStatistics->syllableCount("trusler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tryin")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tryon")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tryout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tryouts")); $this->assertEquals(3, $this->TextStatistics->syllableCount("trzaska")); $this->assertEquals(3, $this->TextStatistics->syllableCount("trzcinski")); $this->assertEquals(4, $this->TextStatistics->syllableCount("trzeciak")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ts")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tsui")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tufte")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tuinstra")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tuition")); $this->assertEquals(3, $this->TextStatistics->syllableCount("tuitions")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tumbler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tumblers")); $this->assertEquals(1, $this->TextStatistics->syllableCount("tunde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tunkelang")); $this->assertEquals(2, $this->TextStatistics->syllableCount("turbeville")); $this->assertEquals(3, $this->TextStatistics->syllableCount("turbocharged")); $this->assertEquals(2, $this->TextStatistics->syllableCount("turcotte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("turquoise")); $this->assertEquals(4, $this->TextStatistics->syllableCount("turrentine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tvsat")); $this->assertEquals(3, $this->TextStatistics->syllableCount("twentieth")); $this->assertEquals(3, $this->TextStatistics->syllableCount("twinkling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("tyo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("typecast")); $this->assertEquals(3, $this->TextStatistics->syllableCount("typecasting")); $this->assertEquals(3, $this->TextStatistics->syllableCount("typefaces")); $this->assertEquals(2, $this->TextStatistics->syllableCount("typeset")); $this->assertEquals(3, $this->TextStatistics->syllableCount("typesetting")); $this->assertEquals(3, $this->TextStatistics->syllableCount("typewriter")); $this->assertEquals(3, $this->TextStatistics->syllableCount("typewriters")); $this->assertEquals(3, $this->TextStatistics->syllableCount("typewriting")); $this->assertEquals(3, $this->TextStatistics->syllableCount("typewritten")); $this->assertEquals(3, $this->TextStatistics->syllableCount("typically")); $this->assertEquals(3, $this->TextStatistics->syllableCount("uarco")); $this->assertEquals(2, $this->TextStatistics->syllableCount("uart")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ubiquity")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uehara")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ueki")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uemura")); $this->assertEquals(1, $this->TextStatistics->syllableCount("uhde")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ukulele")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ulfred")); $this->assertEquals(3, $this->TextStatistics->syllableCount("umpire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("umpires")); $this->assertEquals(5, $this->TextStatistics->syllableCount("unashamedly")); $this->assertEquals(7, $this->TextStatistics->syllableCount("uncharacteristically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uncomfortably")); $this->assertEquals(6, $this->TextStatistics->syllableCount("uncooperative")); $this->assertEquals(6, $this->TextStatistics->syllableCount("uncoordinated")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unctuous")); $this->assertEquals(3, $this->TextStatistics->syllableCount("underserved")); $this->assertEquals(3, $this->TextStatistics->syllableCount("undeserved")); $this->assertEquals(7, $this->TextStatistics->syllableCount("undifferentiated")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unearthed")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unexpired")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unfamiliar")); $this->assertEquals(6, $this->TextStatistics->syllableCount("unfamiliarities")); $this->assertEquals(6, $this->TextStatistics->syllableCount("unfamiliarity")); $this->assertEquals(6, $this->TextStatistics->syllableCount("uninitiated")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uninspired")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uninterested")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uninteresting")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unique")); $this->assertEquals(3, $this->TextStatistics->syllableCount("uniquely")); $this->assertEquals(3, $this->TextStatistics->syllableCount("uniqueness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unmatched")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unnerved")); $this->assertEquals(2, $this->TextStatistics->syllableCount("unplugged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unpretentious")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unreasonable")); $this->assertEquals(3, $this->TextStatistics->syllableCount("unreasoning")); $this->assertEquals(4, $this->TextStatistics->syllableCount("unreimbursed")); $this->assertEquals(5, $this->TextStatistics->syllableCount("unscientific")); $this->assertEquals(6, $this->TextStatistics->syllableCount("unsubstantiated")); $this->assertEquals(3, $this->TextStatistics->syllableCount("untermeyer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("updegrove")); $this->assertEquals(4, $this->TextStatistics->syllableCount("uplinger")); $this->assertEquals(3, $this->TextStatistics->syllableCount("urea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("uribe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("urquhart")); $this->assertEquals(3, $this->TextStatistics->syllableCount("urrea")); $this->assertEquals(3, $this->TextStatistics->syllableCount("usa")); $this->assertEquals(3, $this->TextStatistics->syllableCount("usair")); $this->assertEquals(6, $this->TextStatistics->syllableCount("usameribancs")); $this->assertEquals(4, $this->TextStatistics->syllableCount("usbancorp")); $this->assertEquals(3, $this->TextStatistics->syllableCount("usefulness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("usenet")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ustrust")); $this->assertEquals(2, $this->TextStatistics->syllableCount("uy")); $this->assertEquals(1, $this->TextStatistics->syllableCount("vague")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vaguely")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vagueness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vaguer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valade")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valent")); $this->assertEquals(2, $this->TextStatistics->syllableCount("valiant")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valiantly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valiente")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valiquette")); $this->assertEquals(4, $this->TextStatistics->syllableCount("valladares")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valliere")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vallone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valonia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valores")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valuable")); $this->assertEquals(3, $this->TextStatistics->syllableCount("valuables")); $this->assertEquals(4, $this->TextStatistics->syllableCount("vanacore")); $this->assertEquals(1, $this->TextStatistics->syllableCount("vande")); $this->assertEquals(4, $this->TextStatistics->syllableCount("vanderleest")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vanderlinde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vandermeer")); $this->assertEquals(4, $this->TextStatistics->syllableCount("vandersluis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vandervelde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vandevelde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vandevoorde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vandezande")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vanevery")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vanhecke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("vanhouten")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vanleer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vanleeuwen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vanliew")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vanscyoc")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vantine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vardeman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("varietal")); $this->assertEquals(4, $this->TextStatistics->syllableCount("varnadore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("varrone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vassilios")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vastine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vaudevillian")); $this->assertEquals(1, $this->TextStatistics->syllableCount("vaughan")); $this->assertEquals(4, $this->TextStatistics->syllableCount("vecchione")); $this->assertEquals(1, $this->TextStatistics->syllableCount("veer")); $this->assertEquals(1, $this->TextStatistics->syllableCount("veers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vegetable")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vegetables")); $this->assertEquals(1, $this->TextStatistics->syllableCount("velte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("venneman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("venzke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("verdone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("verduin")); $this->assertEquals(3, $this->TextStatistics->syllableCount("verine")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vermeer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("veronique")); $this->assertEquals(3, $this->TextStatistics->syllableCount("versluis")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vertically")); $this->assertEquals(5, $this->TextStatistics->syllableCount("veterinarian")); $this->assertEquals(5, $this->TextStatistics->syllableCount("veterinarians")); $this->assertEquals(4, $this->TextStatistics->syllableCount("veterinary")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vexatious")); $this->assertEquals(2, $this->TextStatistics->syllableCount("viau")); $this->assertEquals(2, $this->TextStatistics->syllableCount("viceroy")); $this->assertEquals(4, $this->TextStatistics->syllableCount("victorine")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vidales")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vidalia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("viejo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vienna")); $this->assertEquals(3, $this->TextStatistics->syllableCount("viennese")); $this->assertEquals(1, $this->TextStatistics->syllableCount("viers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vietcong")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vieth")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vietnam")); $this->assertEquals(4, $this->TextStatistics->syllableCount("vietnamese")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vietti")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vieyra")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vigeland")); $this->assertEquals(4, $this->TextStatistics->syllableCount("viglione")); $this->assertEquals(1, $this->TextStatistics->syllableCount("vigue")); $this->assertEquals(4, $this->TextStatistics->syllableCount("villafane")); $this->assertEquals(5, $this->TextStatistics->syllableCount("villasenor")); $this->assertEquals(2, $this->TextStatistics->syllableCount("villiers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vineland")); $this->assertEquals(1, $this->TextStatistics->syllableCount("vinje")); $this->assertEquals(4, $this->TextStatistics->syllableCount("violations")); $this->assertEquals(3, $this->TextStatistics->syllableCount("VIP")); $this->assertEquals(3, $this->TextStatistics->syllableCount("virginia")); $this->assertEquals(3, $this->TextStatistics->syllableCount("virginian")); $this->assertEquals(3, $this->TextStatistics->syllableCount("virginians")); $this->assertEquals(3, $this->TextStatistics->syllableCount("virkler")); $this->assertEquals(5, $this->TextStatistics->syllableCount("virtuosity")); $this->assertEquals(4, $this->TextStatistics->syllableCount("virtuoso")); $this->assertEquals(5, $this->TextStatistics->syllableCount("visualization")); $this->assertEquals(3, $this->TextStatistics->syllableCount("visualize")); $this->assertEquals(4, $this->TextStatistics->syllableCount("visualizing")); $this->assertEquals(3, $this->TextStatistics->syllableCount("visually")); $this->assertEquals(2, $this->TextStatistics->syllableCount("visuals")); $this->assertEquals(2, $this->TextStatistics->syllableCount("visx")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vitale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vivien")); $this->assertEquals(4, $this->TextStatistics->syllableCount("vizcaino")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vlcek")); $this->assertEquals(6, $this->TextStatistics->syllableCount("vnesheconombank")); $this->assertEquals(2, $this->TextStatistics->syllableCount("voce")); $this->assertEquals(1, $this->TextStatistics->syllableCount("vocke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vogl")); $this->assertEquals(1, $this->TextStatistics->syllableCount("vogue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("voicemail")); $this->assertEquals(2, $this->TextStatistics->syllableCount("voiceworks")); $this->assertEquals(4, $this->TextStatistics->syllableCount("volcanically")); $this->assertEquals(4, $this->TextStatistics->syllableCount("volentine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("volpe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("volunteer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("volunteers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vorhauer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vosler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vrba")); $this->assertEquals(4, $this->TextStatistics->syllableCount("vrdolyak")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vs")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vsel")); $this->assertEquals(3, $this->TextStatistics->syllableCount("vuolo")); $this->assertEquals(2, $this->TextStatistics->syllableCount("vuong")); $this->assertEquals(3, $this->TextStatistics->syllableCount("w")); $this->assertEquals(2, $this->TextStatistics->syllableCount("waage")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wageman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wahle")); $this->assertEquals(2, $this->TextStatistics->syllableCount("waidelich")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wakefield")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wakeham")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wakeland")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wakeley")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wakeman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("walde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("waleson")); $this->assertEquals(2, $this->TextStatistics->syllableCount("walfred")); $this->assertEquals(1, $this->TextStatistics->syllableCount("walke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wanke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wannabe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wannabes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("warbling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("warde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("warehoused")); $this->assertEquals(2, $this->TextStatistics->syllableCount("warnecke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wass")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wastebasket")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wastebaskets")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wastefulness")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wasteland")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wastepaper")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wastewater")); $this->assertEquals(4, $this->TextStatistics->syllableCount("watanabe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("waterlogged")); $this->assertEquals(3, $this->TextStatistics->syllableCount("watershed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("watling")); $this->assertEquals(4, $this->TextStatistics->syllableCount("watlington")); $this->assertEquals(1, $this->TextStatistics->syllableCount("watne")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wavelength")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wavelengths")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wavetek")); $this->assertEquals(3, $this->TextStatistics->syllableCount("waynesboro")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wedgestone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wedgewood")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wedgeworth")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wednesday")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wednesdays")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wegrzyn")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wehde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weiand")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weide")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weideman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weidemann")); $this->assertEquals(3, $this->TextStatistics->syllableCount("weidler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weigl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weinger")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weist")); $this->assertEquals(1, $this->TextStatistics->syllableCount("welke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wellesley")); $this->assertEquals(1, $this->TextStatistics->syllableCount("welte")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wempe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wenches")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wende")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wengler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wenke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wente")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wenzl")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weppler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("werdesheim")); $this->assertEquals(4, $this->TextStatistics->syllableCount("wereldhave")); $this->assertEquals(1, $this->TextStatistics->syllableCount("werent")); $this->assertEquals(2, $this->TextStatistics->syllableCount("werewolf")); $this->assertEquals(1, $this->TextStatistics->syllableCount("werke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wermiel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wernecke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wernicke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("werre")); $this->assertEquals(2, $this->TextStatistics->syllableCount("weseman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wesemann")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wesler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wess")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wessler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("westmoreland")); $this->assertEquals(3, $this->TextStatistics->syllableCount("weyerhaeuser")); $this->assertEquals(4, $this->TextStatistics->syllableCount("whatsoever")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whereby")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wherehouse")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wherewithal")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitebread")); $this->assertEquals(3, $this->TextStatistics->syllableCount("whitecotton")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitefield")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitefish")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whiteford")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitehair")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitehall")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitehead")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitehill")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitehorn")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitehorse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitehouse")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitehurst")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitelaw")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whiteley")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitelock")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whiteman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitemont")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitenack")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whiteneir")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitener")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitenight")); $this->assertEquals(3, $this->TextStatistics->syllableCount("whitescarver")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitesel")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitesell")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitetail")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitewash")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whitewashed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("whitewater")); $this->assertEquals(2, $this->TextStatistics->syllableCount("whittemore")); $this->assertEquals(3, $this->TextStatistics->syllableCount("whoever")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wholehearted")); $this->assertEquals(4, $this->TextStatistics->syllableCount("wholeheartedly")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wholesale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wholesaler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wholesalers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wholesales")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wholesaling")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wholesomeness")); $this->assertEquals(4, $this->TextStatistics->syllableCount("whosoever")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wicke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wickes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wickliffe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("widebody")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wideman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("widespread")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wiedeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wiedemann")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wienecke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wienke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wiers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wiesemann")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wiggly")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wiitala")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wilde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wildeman")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wildes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wildfire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wildfires")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wildflowers")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wileman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wilfred")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wilke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wilkes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wilkesboro")); $this->assertEquals(2, $this->TextStatistics->syllableCount("william")); $this->assertEquals(2, $this->TextStatistics->syllableCount("williams")); $this->assertEquals(3, $this->TextStatistics->syllableCount("williamsburg")); $this->assertEquals(3, $this->TextStatistics->syllableCount("williamsburgh")); $this->assertEquals(3, $this->TextStatistics->syllableCount("williamsen")); $this->assertEquals(3, $this->TextStatistics->syllableCount("williamson")); $this->assertEquals(3, $this->TextStatistics->syllableCount("williamsport")); $this->assertEquals(3, $this->TextStatistics->syllableCount("williamstown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("williard")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wilmes")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wiltse")); $this->assertEquals(1, $this->TextStatistics->syllableCount("windes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wineberg")); $this->assertEquals(3, $this->TextStatistics->syllableCount("winegarden")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wineheim")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wineman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("winemiller")); $this->assertEquals(2, $this->TextStatistics->syllableCount("winfred")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wingler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("winifred")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wipeout")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wire")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wired")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wireline")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wireman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wires")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wiretaps")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wisecarver")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wisecrack")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wisecracking")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wisecracks")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wisecup")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wiseguy")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wisehart")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wiseman")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wisler")); $this->assertEquals(4, $this->TextStatistics->syllableCount("wisniewski")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wissler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("witte")); $this->assertEquals(2, $this->TextStatistics->syllableCount("witteman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wittler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("witzke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("wlodarczyk")); $this->assertEquals(4, $this->TextStatistics->syllableCount("wlodarski")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wm")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wobbe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wobbly")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wolfe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wolke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wolske")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wolstenholme")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wooed")); $this->assertEquals(2, $this->TextStatistics->syllableCount("worcester")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wotring")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wouldnt")); $this->assertEquals(1, $this->TextStatistics->syllableCount("woulfe")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wrangler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wranglers")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wrangling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wrenches")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wrestler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wrinkling")); $this->assertEquals(2, $this->TextStatistics->syllableCount("writedown")); $this->assertEquals(2, $this->TextStatistics->syllableCount("writedowns")); $this->assertEquals(4, $this->TextStatistics->syllableCount("wrzesinski")); $this->assertEquals(4, $this->TextStatistics->syllableCount("ws")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wuest")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wurdeman")); $this->assertEquals(2, $this->TextStatistics->syllableCount("wussler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("wylde")); $this->assertEquals(3, $this->TextStatistics->syllableCount("wyoming")); $this->assertEquals(1, $this->TextStatistics->syllableCount("xanthe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("xantippe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("xavier")); $this->assertEquals(4, $this->TextStatistics->syllableCount("xaviera")); $this->assertEquals(1, $this->TextStatistics->syllableCount("xian")); $this->assertEquals(2, $this->TextStatistics->syllableCount("xiaoping")); $this->assertEquals(2, $this->TextStatistics->syllableCount("xiaoyun")); $this->assertEquals(2, $this->TextStatistics->syllableCount("xscribe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("xtra")); $this->assertEquals(1, $this->TextStatistics->syllableCount("xuan")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yaffe")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yahnke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("yamaichi")); $this->assertEquals(3, $this->TextStatistics->syllableCount("yamane")); $this->assertEquals(4, $this->TextStatistics->syllableCount("yamatake")); $this->assertEquals(4, $this->TextStatistics->syllableCount("yamauchi")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yanke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("yarbrough")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yarde")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yarmulkes")); $this->assertEquals(3, $this->TextStatistics->syllableCount("yasuo")); $this->assertEquals(3, $this->TextStatistics->syllableCount("yearearlier")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yeates")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yerke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("yingling")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ynez")); $this->assertEquals(2, $this->TextStatistics->syllableCount("ynjiun")); $this->assertEquals(3, $this->TextStatistics->syllableCount("yoichi")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yolande")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yongue")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yonke")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yorio")); $this->assertEquals(1, $this->TextStatistics->syllableCount("yorke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("yosemite")); $this->assertEquals(2, $this->TextStatistics->syllableCount("yuletide")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zaccone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zaire")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zairean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zaireans")); $this->assertEquals(4, $this->TextStatistics->syllableCount("zairian")); $this->assertEquals(4, $this->TextStatistics->syllableCount("zairians")); $this->assertEquals(4, $this->TextStatistics->syllableCount("zakrzewski")); $this->assertEquals(4, $this->TextStatistics->syllableCount("zaniewski")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zappone")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zarcone")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zayed")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zeidler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zeigler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zeisler")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zeitler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zemke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zerbe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zeringue")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zettler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zhejiang")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zielke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("ziemke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zier")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zierke")); $this->assertEquals(3, $this->TextStatistics->syllableCount("ziesmer")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zigler")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zigzagged")); $this->assertEquals(4, $this->TextStatistics->syllableCount("zimbabwean")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zingale")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zingler")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zinke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zirbes")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zoe")); $this->assertEquals(2, $this->TextStatistics->syllableCount("zoete")); $this->assertEquals(3, $this->TextStatistics->syllableCount("zorine")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zuehlke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zuelke")); $this->assertEquals(1, $this->TextStatistics->syllableCount("zuhlke")); $this->assertEquals(4, $this->TextStatistics->syllableCount("zuidema")); } } ================================================ FILE: vendor/davechild/textstatistics/tests/TextStatisticsKiplingIfTest.php ================================================ TextStatistics = new DaveChild\TextStatistics\TextStatistics(); $this->TextStatistics->normalise = false; } public function tearDown() { unset($this->objTextStatistics); } /* Test Syllables -------------------- */ public function testKiplingSyllables() { // The Words from If, in order $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('keep'), 1); $this->assertEquals($this->TextStatistics->syllableCount('your'), 1); $this->assertEquals($this->TextStatistics->syllableCount('head'), 1); $this->assertEquals($this->TextStatistics->syllableCount('when'), 1); $this->assertEquals($this->TextStatistics->syllableCount('all'), 1); $this->assertEquals($this->TextStatistics->syllableCount('about'), 2); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('Are'), 1); $this->assertEquals($this->TextStatistics->syllableCount('losing'), 2); $this->assertEquals($this->TextStatistics->syllableCount('theirs'), 1); $this->assertEquals($this->TextStatistics->syllableCount('and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('blaming'), 2); $this->assertEquals($this->TextStatistics->syllableCount('it'), 1); $this->assertEquals($this->TextStatistics->syllableCount('on'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('trust'), 1); $this->assertEquals($this->TextStatistics->syllableCount('yourself'), 2); $this->assertEquals($this->TextStatistics->syllableCount('when'), 1); $this->assertEquals($this->TextStatistics->syllableCount('all'), 1); $this->assertEquals($this->TextStatistics->syllableCount('men'), 1); $this->assertEquals($this->TextStatistics->syllableCount('doubt'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('But'), 1); $this->assertEquals($this->TextStatistics->syllableCount('make'), 1); $this->assertEquals($this->TextStatistics->syllableCount('allowance'), 3); $this->assertEquals($this->TextStatistics->syllableCount('for'), 1); $this->assertEquals($this->TextStatistics->syllableCount('their'), 1); $this->assertEquals($this->TextStatistics->syllableCount('doubting'), 2); $this->assertEquals($this->TextStatistics->syllableCount('too,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('wait'), 1); $this->assertEquals($this->TextStatistics->syllableCount('and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('not'), 1); $this->assertEquals($this->TextStatistics->syllableCount('be'), 1); $this->assertEquals($this->TextStatistics->syllableCount('tired'), 1); $this->assertEquals($this->TextStatistics->syllableCount('by'), 1); $this->assertEquals($this->TextStatistics->syllableCount('waiting,'), 2); $this->assertEquals($this->TextStatistics->syllableCount('Or'), 1); $this->assertEquals($this->TextStatistics->syllableCount('being'), 2); $this->assertEquals($this->TextStatistics->syllableCount('lied'), 1); $this->assertEquals($this->TextStatistics->syllableCount('about,'), 2); $this->assertEquals($this->TextStatistics->syllableCount('don\'t'), 1); $this->assertEquals($this->TextStatistics->syllableCount('deal'), 1); $this->assertEquals($this->TextStatistics->syllableCount('in'), 1); $this->assertEquals($this->TextStatistics->syllableCount('lies,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('Or'), 1); $this->assertEquals($this->TextStatistics->syllableCount('being'), 2); $this->assertEquals($this->TextStatistics->syllableCount('hated,'), 2); $this->assertEquals($this->TextStatistics->syllableCount('don\'t'), 1); $this->assertEquals($this->TextStatistics->syllableCount('give'), 1); $this->assertEquals($this->TextStatistics->syllableCount('way'), 1); $this->assertEquals($this->TextStatistics->syllableCount('to'), 1); $this->assertEquals($this->TextStatistics->syllableCount('hating,'), 2); $this->assertEquals($this->TextStatistics->syllableCount('And'), 1); $this->assertEquals($this->TextStatistics->syllableCount('yet'), 1); $this->assertEquals($this->TextStatistics->syllableCount('don\'t'), 1); $this->assertEquals($this->TextStatistics->syllableCount('look'), 1); $this->assertEquals($this->TextStatistics->syllableCount('too'), 1); $this->assertEquals($this->TextStatistics->syllableCount('good,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('nor'), 1); $this->assertEquals($this->TextStatistics->syllableCount('talk'), 1); $this->assertEquals($this->TextStatistics->syllableCount('too'), 1); $this->assertEquals($this->TextStatistics->syllableCount('wise:'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('dream'), 1); $this->assertEquals($this->TextStatistics->syllableCount('-and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('not'), 1); $this->assertEquals($this->TextStatistics->syllableCount('make'), 1); $this->assertEquals($this->TextStatistics->syllableCount('dreams'), 1); $this->assertEquals($this->TextStatistics->syllableCount('your'), 1); $this->assertEquals($this->TextStatistics->syllableCount('master,'), 2); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('think'), 1); $this->assertEquals($this->TextStatistics->syllableCount('-and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('not'), 1); $this->assertEquals($this->TextStatistics->syllableCount('make'), 1); $this->assertEquals($this->TextStatistics->syllableCount('thoughts'), 1); $this->assertEquals($this->TextStatistics->syllableCount('your'), 1); $this->assertEquals($this->TextStatistics->syllableCount('aim;'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('meet'), 1); $this->assertEquals($this->TextStatistics->syllableCount('with'), 1); $this->assertEquals($this->TextStatistics->syllableCount('Triumph'), 2); $this->assertEquals($this->TextStatistics->syllableCount('and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('Disaster'), 3); $this->assertEquals($this->TextStatistics->syllableCount('And'), 1); $this->assertEquals($this->TextStatistics->syllableCount('treat'), 1); $this->assertEquals($this->TextStatistics->syllableCount('those'), 1); $this->assertEquals($this->TextStatistics->syllableCount('two'), 1); $this->assertEquals($this->TextStatistics->syllableCount('impostors'), 3); $this->assertEquals($this->TextStatistics->syllableCount('just'), 1); $this->assertEquals($this->TextStatistics->syllableCount('the'), 1); $this->assertEquals($this->TextStatistics->syllableCount('same;'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('bear'), 1); $this->assertEquals($this->TextStatistics->syllableCount('to'), 1); $this->assertEquals($this->TextStatistics->syllableCount('hear'), 1); $this->assertEquals($this->TextStatistics->syllableCount('the'), 1); $this->assertEquals($this->TextStatistics->syllableCount('truth'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you\'ve'), 1); $this->assertEquals($this->TextStatistics->syllableCount('spoken'), 2); $this->assertEquals($this->TextStatistics->syllableCount('Twisted'), 2); $this->assertEquals($this->TextStatistics->syllableCount('by'), 1); $this->assertEquals($this->TextStatistics->syllableCount('knaves'), 1); $this->assertEquals($this->TextStatistics->syllableCount('to'), 1); $this->assertEquals($this->TextStatistics->syllableCount('make'), 1); $this->assertEquals($this->TextStatistics->syllableCount('a'), 1); $this->assertEquals($this->TextStatistics->syllableCount('trap'), 1); $this->assertEquals($this->TextStatistics->syllableCount('for'), 1); $this->assertEquals($this->TextStatistics->syllableCount('fools,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('Or'), 1); $this->assertEquals($this->TextStatistics->syllableCount('watch'), 1); $this->assertEquals($this->TextStatistics->syllableCount('the'), 1); $this->assertEquals($this->TextStatistics->syllableCount('things'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('gave'), 1); $this->assertEquals($this->TextStatistics->syllableCount('your'), 1); $this->assertEquals($this->TextStatistics->syllableCount('life'), 1); $this->assertEquals($this->TextStatistics->syllableCount('to,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('broken,'), 2); $this->assertEquals($this->TextStatistics->syllableCount('And'), 1); $this->assertEquals($this->TextStatistics->syllableCount('stoop'), 1); $this->assertEquals($this->TextStatistics->syllableCount('and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('build'), 1); $this->assertEquals($this->TextStatistics->syllableCount('\'em'), 1); $this->assertEquals($this->TextStatistics->syllableCount('up'), 1); $this->assertEquals($this->TextStatistics->syllableCount('with'), 1); $this->assertEquals($this->TextStatistics->syllableCount('worn'), 1); $this->assertEquals($this->TextStatistics->syllableCount('-out'), 1); $this->assertEquals($this->TextStatistics->syllableCount('tools:'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('make'), 1); $this->assertEquals($this->TextStatistics->syllableCount('one'), 1); $this->assertEquals($this->TextStatistics->syllableCount('heap'), 1); $this->assertEquals($this->TextStatistics->syllableCount('of'), 1); $this->assertEquals($this->TextStatistics->syllableCount('all'), 1); $this->assertEquals($this->TextStatistics->syllableCount('your'), 1); $this->assertEquals($this->TextStatistics->syllableCount('winnings'), 2); $this->assertEquals($this->TextStatistics->syllableCount('And'), 1); $this->assertEquals($this->TextStatistics->syllableCount('risk'), 1); $this->assertEquals($this->TextStatistics->syllableCount('it'), 1); $this->assertEquals($this->TextStatistics->syllableCount('all'), 1); $this->assertEquals($this->TextStatistics->syllableCount('on'), 1); $this->assertEquals($this->TextStatistics->syllableCount('one'), 1); $this->assertEquals($this->TextStatistics->syllableCount('turn'), 1); $this->assertEquals($this->TextStatistics->syllableCount('of'), 1); $this->assertEquals($this->TextStatistics->syllableCount('pitch'), 1); $this->assertEquals($this->TextStatistics->syllableCount('-and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('-toss,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('And'), 1); $this->assertEquals($this->TextStatistics->syllableCount('lose,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('start'), 1); $this->assertEquals($this->TextStatistics->syllableCount('again'), 2); $this->assertEquals($this->TextStatistics->syllableCount('at'), 1); $this->assertEquals($this->TextStatistics->syllableCount('your'), 1); $this->assertEquals($this->TextStatistics->syllableCount('beginnings'), 3); $this->assertEquals($this->TextStatistics->syllableCount('And'), 1); $this->assertEquals($this->TextStatistics->syllableCount('never'), 2); $this->assertEquals($this->TextStatistics->syllableCount('breath'), 1); $this->assertEquals($this->TextStatistics->syllableCount('a'), 1); $this->assertEquals($this->TextStatistics->syllableCount('word'), 1); $this->assertEquals($this->TextStatistics->syllableCount('about'), 2); $this->assertEquals($this->TextStatistics->syllableCount('your'), 1); $this->assertEquals($this->TextStatistics->syllableCount('loss;'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('force'), 1); $this->assertEquals($this->TextStatistics->syllableCount('your'), 1); $this->assertEquals($this->TextStatistics->syllableCount('heart'), 1); $this->assertEquals($this->TextStatistics->syllableCount('and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('nerve'), 1); $this->assertEquals($this->TextStatistics->syllableCount('and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('sinew'), 2); $this->assertEquals($this->TextStatistics->syllableCount('To'), 1); $this->assertEquals($this->TextStatistics->syllableCount('serve'), 1); $this->assertEquals($this->TextStatistics->syllableCount('your'), 1); $this->assertEquals($this->TextStatistics->syllableCount('turn'), 1); $this->assertEquals($this->TextStatistics->syllableCount('long'), 1); $this->assertEquals($this->TextStatistics->syllableCount('after'), 2); $this->assertEquals($this->TextStatistics->syllableCount('they'), 1); $this->assertEquals($this->TextStatistics->syllableCount('are'), 1); $this->assertEquals($this->TextStatistics->syllableCount('gone,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('And'), 1); $this->assertEquals($this->TextStatistics->syllableCount('so'), 1); $this->assertEquals($this->TextStatistics->syllableCount('hold'), 1); $this->assertEquals($this->TextStatistics->syllableCount('on'), 1); $this->assertEquals($this->TextStatistics->syllableCount('when'), 1); $this->assertEquals($this->TextStatistics->syllableCount('there'), 1); $this->assertEquals($this->TextStatistics->syllableCount('is'), 1); $this->assertEquals($this->TextStatistics->syllableCount('nothing'), 2); $this->assertEquals($this->TextStatistics->syllableCount('in'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('Except'), 2); $this->assertEquals($this->TextStatistics->syllableCount('the'), 1); $this->assertEquals($this->TextStatistics->syllableCount('Will'), 1); $this->assertEquals($this->TextStatistics->syllableCount('which'), 1); $this->assertEquals($this->TextStatistics->syllableCount('says'), 1); $this->assertEquals($this->TextStatistics->syllableCount('to'), 1); $this->assertEquals($this->TextStatistics->syllableCount('them:'), 1); $this->assertEquals($this->TextStatistics->syllableCount('"Hold'), 1); $this->assertEquals($this->TextStatistics->syllableCount('on!"'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('talk'), 1); $this->assertEquals($this->TextStatistics->syllableCount('with'), 1); $this->assertEquals($this->TextStatistics->syllableCount('crowds'), 1); $this->assertEquals($this->TextStatistics->syllableCount('and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('keep'), 1); $this->assertEquals($this->TextStatistics->syllableCount('your'), 1); $this->assertEquals($this->TextStatistics->syllableCount('virtue,'), 2); $this->assertEquals($this->TextStatistics->syllableCount('Or'), 1); $this->assertEquals($this->TextStatistics->syllableCount('walk'), 1); $this->assertEquals($this->TextStatistics->syllableCount('with'), 1); $this->assertEquals($this->TextStatistics->syllableCount('kings'), 1); $this->assertEquals($this->TextStatistics->syllableCount('-nor'), 1); $this->assertEquals($this->TextStatistics->syllableCount('lose'), 1); $this->assertEquals($this->TextStatistics->syllableCount('the'), 1); $this->assertEquals($this->TextStatistics->syllableCount('common'), 2); $this->assertEquals($this->TextStatistics->syllableCount('touch,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('neither'), 2); $this->assertEquals($this->TextStatistics->syllableCount('foes'), 1); $this->assertEquals($this->TextStatistics->syllableCount('nor'), 1); $this->assertEquals($this->TextStatistics->syllableCount('loving'), 2); $this->assertEquals($this->TextStatistics->syllableCount('friends'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('hurt'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you;'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('all'), 1); $this->assertEquals($this->TextStatistics->syllableCount('men'), 1); $this->assertEquals($this->TextStatistics->syllableCount('count'), 1); $this->assertEquals($this->TextStatistics->syllableCount('with'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('but'), 1); $this->assertEquals($this->TextStatistics->syllableCount('none'), 1); $this->assertEquals($this->TextStatistics->syllableCount('too'), 1); $this->assertEquals($this->TextStatistics->syllableCount('much'), 1); $this->assertEquals($this->TextStatistics->syllableCount('If'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you'), 1); $this->assertEquals($this->TextStatistics->syllableCount('can'), 1); $this->assertEquals($this->TextStatistics->syllableCount('fill'), 1); $this->assertEquals($this->TextStatistics->syllableCount('the'), 1); $this->assertEquals($this->TextStatistics->syllableCount('unforgiving'), 4); $this->assertEquals($this->TextStatistics->syllableCount('minute'), 2); $this->assertEquals($this->TextStatistics->syllableCount('With'), 1); $this->assertEquals($this->TextStatistics->syllableCount('sixty'), 2); $this->assertEquals($this->TextStatistics->syllableCount('seconds\''), 2); $this->assertEquals($this->TextStatistics->syllableCount('worth'), 1); $this->assertEquals($this->TextStatistics->syllableCount('of'), 1); $this->assertEquals($this->TextStatistics->syllableCount('distance'), 2); $this->assertEquals($this->TextStatistics->syllableCount('run,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('Yours'), 1); $this->assertEquals($this->TextStatistics->syllableCount('is'), 1); $this->assertEquals($this->TextStatistics->syllableCount('the'), 1); $this->assertEquals($this->TextStatistics->syllableCount('Earth'), 1); $this->assertEquals($this->TextStatistics->syllableCount('and'), 1); $this->assertEquals($this->TextStatistics->syllableCount('everything'), 4); $this->assertEquals($this->TextStatistics->syllableCount('that\'s'), 1); $this->assertEquals($this->TextStatistics->syllableCount('in'), 1); $this->assertEquals($this->TextStatistics->syllableCount('it,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('And'), 1); $this->assertEquals($this->TextStatistics->syllableCount('which'), 1); $this->assertEquals($this->TextStatistics->syllableCount('is'), 1); $this->assertEquals($this->TextStatistics->syllableCount('more'), 1); $this->assertEquals($this->TextStatistics->syllableCount('you\'ll'), 1); $this->assertEquals($this->TextStatistics->syllableCount('be'), 1); $this->assertEquals($this->TextStatistics->syllableCount('a'), 1); $this->assertEquals($this->TextStatistics->syllableCount('Man,'), 1); $this->assertEquals($this->TextStatistics->syllableCount('my'), 1); $this->assertEquals($this->TextStatistics->syllableCount('son!'), 1); } /* Test Total Letters -------------------- */ public function testLetterCount() { $this->assertEquals(1125, $this->TextStatistics->letterCount($this->strText)); } /* Test Total Syllables -------------------- */ public function testSyllableCount() { $this->assertEquals(338, $this->TextStatistics->totalSyllables($this->strText)); } /* Test Words -------------------- */ public function testWordCount() { $this->assertEquals(292, $this->TextStatistics->wordCount($this->strText)); } /* Test Sentences -------------------- */ public function testSentenceCount() { $this->assertEquals(4, $this->TextStatistics->sentenceCount($this->strText)); } /* Test Letter Count -------------------- */ public function testTextLengthCheck() { $this->assertEquals(1125, $this->TextStatistics->letterCount($this->strText)); } /* Test Flesch Kincaid Reading Ease -------------------- */ public function testFleschKincaidReadingEase() { $this->assertEquals(34.8, $this->TextStatistics->flesch_kincaid_reading_ease($this->strText)); } /* Test Flesch Kincaid Grade Level -------------------- */ public function testFleschKincaidGradeLevel() { $this->assertEquals(26.5, $this->TextStatistics->flesch_kincaid_grade_level($this->strText)); } /* Test Gunning Fog Score -------------------- */ public function testGunningFogScore() { $this->assertEquals(29.9, $this->TextStatistics->gunning_fog_score($this->strText)); } /* Test Coleman Liau Index -------------------- */ public function testColemanLiauIndex() { $this->assertEquals(6.9, $this->TextStatistics->coleman_liau_index($this->strText)); } /* Test SMOG Index -------------------- */ public function testSMOGIndex() { $this->assertEquals(7.2, $this->TextStatistics->smog_index($this->strText)); } /* Test Automated Readability Index -------------------- */ public function testAutomatedReadabilityIndex() { $this->assertEquals(33.2, $this->TextStatistics->automated_readability_index($this->strText)); } } ================================================ FILE: vendor/davechild/textstatistics/tests/TextStatisticsMaths.php ================================================ TextStatistics = new DaveChild\TextStatistics\TextStatistics(); $this->TextStatistics->normalise = false; } public function tearDown() { unset($this->objTextStatistics); } /* Test Normalisation -------------------- */ public function testNormalisation() { // Maths::normaliseScore($score, $min, $max, $dps = 1) $this->assertSame(3.1, DaveChild\TextStatistics\Maths::normaliseScore(3.141592654, 1, 10, 1)); $this->assertSame(10.0, DaveChild\TextStatistics\Maths::normaliseScore(13.141592654, 1, 10, 1)); $this->assertSame(1.0, DaveChild\TextStatistics\Maths::normaliseScore(-3.141592654, 1, 10, 1)); $this->assertSame(3.0, DaveChild\TextStatistics\Maths::normaliseScore(3, 1, 10, 1)); $this->assertSame(3, DaveChild\TextStatistics\Maths::normaliseScore(3.141592654, 1, 10, 0)); $this->assertSame(10, DaveChild\TextStatistics\Maths::normaliseScore(13.141592654, 1, 10, 0)); $this->assertSame(1, DaveChild\TextStatistics\Maths::normaliseScore(-3.141592654, 1, 10, 0)); $this->assertSame(3, DaveChild\TextStatistics\Maths::normaliseScore(3, 1, 10, 0)); } /* Test Normalisation -------------------- */ public function testCalc() { $this->assertSame(15.0, DaveChild\TextStatistics\Maths::bcCalc(10, '+', 5, true, 1)); $this->assertSame(15.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'add', 5, true, 1)); $this->assertSame(15.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'addition', 5, true, 1)); $this->assertSame(15.6, DaveChild\TextStatistics\Maths::bcCalc(10, '+', 5.55, true, 1)); $this->assertSame(15.6, DaveChild\TextStatistics\Maths::bcCalc(10, 'add', 5.55, true, 1)); $this->assertSame(15.6, DaveChild\TextStatistics\Maths::bcCalc(10, 'addition', 5.55, true, 1)); $this->assertSame(5.0, DaveChild\TextStatistics\Maths::bcCalc(10, '-', 5, true, 1)); $this->assertSame(5.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'sub', 5, true, 1)); $this->assertSame(5.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'subtract', 5, true, 1)); $this->assertSame(4.5, DaveChild\TextStatistics\Maths::bcCalc(10, '-', 5.55, true, 1)); $this->assertSame(4.5, DaveChild\TextStatistics\Maths::bcCalc(10, 'sub', 5.55, true, 1)); $this->assertSame(4.5, DaveChild\TextStatistics\Maths::bcCalc(10, 'subtract', 5.55, true, 1)); $this->assertSame(4.4, DaveChild\TextStatistics\Maths::bcCalc(10, '-', 5.56, true, 1)); $this->assertSame(4.4, DaveChild\TextStatistics\Maths::bcCalc(10, 'sub', 5.56, true, 1)); $this->assertSame(4.4, DaveChild\TextStatistics\Maths::bcCalc(10, 'subtract', 5.56, true, 1)); $this->assertSame(50.0, DaveChild\TextStatistics\Maths::bcCalc(10, '*', 5, true, 1)); $this->assertSame(50.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'mul', 5, true, 1)); $this->assertSame(50.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'multiply', 5, true, 1)); $this->assertSame(55.6, DaveChild\TextStatistics\Maths::bcCalc(10, '*', 5.555, true, 1)); $this->assertSame(55.6, DaveChild\TextStatistics\Maths::bcCalc(10, 'mul', 5.555, true, 1)); $this->assertSame(55.6, DaveChild\TextStatistics\Maths::bcCalc(10, 'multiply', 5.555, true, 1)); $this->assertSame(2.0, DaveChild\TextStatistics\Maths::bcCalc(10, '/', 5, true, 1)); $this->assertSame(2.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'div', 5, true, 1)); $this->assertSame(2.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'divide', 5, true, 1)); $this->assertSame(1.8, DaveChild\TextStatistics\Maths::bcCalc(10, '/', 5.5, true, 1)); $this->assertSame(1.8, DaveChild\TextStatistics\Maths::bcCalc(10, 'div', 5.5, true, 1)); $this->assertSame(1.8, DaveChild\TextStatistics\Maths::bcCalc(10, 'divide', 5.5, true, 1)); $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc(0, '/', 10, true, 1)); $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc(0, 'div', 10, true, 1)); $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc(0, 'divide', 10, true, 1)); $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc(10, '%', 5, true, 1)); $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'mod', 5, true, 1)); $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'modulus', 5, true, 1)); $this->assertSame(3.0, DaveChild\TextStatistics\Maths::bcCalc(10, '%', 7, true, 1)); $this->assertSame(3.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'mod', 7, true, 1)); $this->assertSame(3.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'modulus', 7, true, 1)); // Modulus can only be an integer and is rounded before calculation $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc(10, '%', 5.55, true, 1)); $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'mod', 5.55, true, 1)); $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'modulus', 5.55, true, 1)); $this->assertSame(3.0, DaveChild\TextStatistics\Maths::bcCalc(10, '%', 7.55, true, 1)); $this->assertSame(3.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'mod', 7.55, true, 1)); $this->assertSame(3.0, DaveChild\TextStatistics\Maths::bcCalc(10, 'modulus', 7.55, true, 1)); $this->assertSame(1, DaveChild\TextStatistics\Maths::bcCalc(10, '=', 5, true, 1)); $this->assertSame(1, DaveChild\TextStatistics\Maths::bcCalc(10, 'comp', 5, true, 1)); $this->assertSame(1, DaveChild\TextStatistics\Maths::bcCalc(10, 'compare', 5, true, 1)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, '=', 10, true, 1)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, 'comp', 10, true, 1)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, 'compare', 10, true, 1)); $this->assertSame(-1, DaveChild\TextStatistics\Maths::bcCalc(5, '=', 10, true, 1)); $this->assertSame(-1, DaveChild\TextStatistics\Maths::bcCalc(5, 'comp', 10, true, 1)); $this->assertSame(-1, DaveChild\TextStatistics\Maths::bcCalc(5, 'compare', 10, true, 1)); $this->assertSame(4.0, DaveChild\TextStatistics\Maths::bcCalc(16, 'sqrt', 5, true, 1)); $this->assertSame(3.9, DaveChild\TextStatistics\Maths::bcCalc(15, 'sqrt', 5, true, 1)); $this->assertSame(15, DaveChild\TextStatistics\Maths::bcCalc(10, '+', 5)); $this->assertSame(15, DaveChild\TextStatistics\Maths::bcCalc(10, 'add', 5)); $this->assertSame(15, DaveChild\TextStatistics\Maths::bcCalc(10, 'addition', 5)); $this->assertSame(15.55, DaveChild\TextStatistics\Maths::bcCalc(10, '+', 5.55)); $this->assertSame(15.55, DaveChild\TextStatistics\Maths::bcCalc(10, 'add', 5.55)); $this->assertSame(15.55, DaveChild\TextStatistics\Maths::bcCalc(10, 'addition', 5.55)); $this->assertSame(5, DaveChild\TextStatistics\Maths::bcCalc(10, '-', 5)); $this->assertSame(5, DaveChild\TextStatistics\Maths::bcCalc(10, 'sub', 5)); $this->assertSame(5, DaveChild\TextStatistics\Maths::bcCalc(10, 'subtract', 5)); $this->assertSame(4.45, DaveChild\TextStatistics\Maths::bcCalc(10, '-', 5.55)); $this->assertSame(4.45, DaveChild\TextStatistics\Maths::bcCalc(10, 'sub', 5.55)); $this->assertSame(4.45, DaveChild\TextStatistics\Maths::bcCalc(10, 'subtract', 5.55)); $this->assertSame(4.44, DaveChild\TextStatistics\Maths::bcCalc(10, '-', 5.56)); $this->assertSame(4.44, DaveChild\TextStatistics\Maths::bcCalc(10, 'sub', 5.56)); $this->assertSame(4.44, DaveChild\TextStatistics\Maths::bcCalc(10, 'subtract', 5.56)); $this->assertSame(50, DaveChild\TextStatistics\Maths::bcCalc(10, '*', 5)); $this->assertSame(50, DaveChild\TextStatistics\Maths::bcCalc(10, 'mul', 5)); $this->assertSame(50, DaveChild\TextStatistics\Maths::bcCalc(10, 'multiply', 5)); $this->assertSame(55.55, DaveChild\TextStatistics\Maths::bcCalc(10, '*', 5.555)); $this->assertSame(55.55, DaveChild\TextStatistics\Maths::bcCalc(10, 'mul', 5.555)); $this->assertSame(55.55, DaveChild\TextStatistics\Maths::bcCalc(10, 'multiply', 5.555)); $this->assertSame(2, DaveChild\TextStatistics\Maths::bcCalc(10, '/', 5)); $this->assertSame(2, DaveChild\TextStatistics\Maths::bcCalc(10, 'div', 5)); $this->assertSame(2, DaveChild\TextStatistics\Maths::bcCalc(10, 'divide', 5)); $this->assertSame(1.81818, DaveChild\TextStatistics\Maths::bcCalc(10, '/', 5.5, true, 5)); $this->assertSame(1.81818, DaveChild\TextStatistics\Maths::bcCalc(10, 'div', 5.5, true, 5)); $this->assertSame(1.81818, DaveChild\TextStatistics\Maths::bcCalc(10, 'divide', 5.5, true, 5)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(0, '/', 10)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(0, 'div', 10)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(0, 'divide', 10)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, '%', 5)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, 'mod', 5)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, 'modulus', 5)); $this->assertSame(3, DaveChild\TextStatistics\Maths::bcCalc(10, '%', 7)); $this->assertSame(3, DaveChild\TextStatistics\Maths::bcCalc(10, 'mod', 7)); $this->assertSame(3, DaveChild\TextStatistics\Maths::bcCalc(10, 'modulus', 7)); // Modulus can only be an integer and is rounded before calculation $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, '%', 5.55)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, 'mod', 5.55)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, 'modulus', 5.55)); $this->assertSame(3, DaveChild\TextStatistics\Maths::bcCalc(10, '%', 7.55)); $this->assertSame(3, DaveChild\TextStatistics\Maths::bcCalc(10, 'mod', 7.55)); $this->assertSame(3, DaveChild\TextStatistics\Maths::bcCalc(10, 'modulus', 7.55)); $this->assertSame(1, DaveChild\TextStatistics\Maths::bcCalc(10, '=', 5)); $this->assertSame(1, DaveChild\TextStatistics\Maths::bcCalc(10, 'comp', 5)); $this->assertSame(1, DaveChild\TextStatistics\Maths::bcCalc(10, 'compare', 5)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, '=', 10)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, 'comp', 10)); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc(10, 'compare', 10)); $this->assertSame(-1, DaveChild\TextStatistics\Maths::bcCalc(5, '=', 10)); $this->assertSame(-1, DaveChild\TextStatistics\Maths::bcCalc(5, 'comp', 10)); $this->assertSame(-1, DaveChild\TextStatistics\Maths::bcCalc(5, 'compare', 10)); $this->assertSame(4, DaveChild\TextStatistics\Maths::bcCalc(16, 'sqrt', 5)); $this->assertSame(3.87298, DaveChild\TextStatistics\Maths::bcCalc(15, 'sqrt', 5, true, 5)); // Malformed data $this->assertSame(false, DaveChild\TextStatistics\Maths::bcCalc(array('banana'), '+', 2, true, 1)); $this->assertSame(false, DaveChild\TextStatistics\Maths::bcCalc(2, '+', array('banana'), true, 1)); $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc('two', '+', 'three', true, 1)); $this->assertSame(0.0, DaveChild\TextStatistics\Maths::bcCalc('two', '/', 'three', true, 1)); $this->assertSame(false, DaveChild\TextStatistics\Maths::bcCalc(array('banana'), '+', 2)); $this->assertSame(false, DaveChild\TextStatistics\Maths::bcCalc(2, '+', array('banana'))); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc('two', '+', 'three')); $this->assertSame(0, DaveChild\TextStatistics\Maths::bcCalc('two', '/', 'three')); } } ================================================ FILE: vendor/davechild/textstatistics/tests/TextStatisticsMelvilleMobyDickTest.php ================================================ TextStatistics = new DaveChild\TextStatistics\TextStatistics(); $this->TextStatistics->normalise = false; } public function tearDown() { unset($this->objTextStatistics); } /* Test Syllables -------------------- */ public function testMobyDickSyllables() { // The Words from Moby Dick, in order $this->assertEquals(1, $this->TextStatistics->syllableCount('Call')); $this->assertEquals(1, $this->TextStatistics->syllableCount('me')); $this->assertEquals(2, $this->TextStatistics->syllableCount('Ishmael')); $this->assertEquals(1, $this->TextStatistics->syllableCount('Some')); $this->assertEquals(1, $this->TextStatistics->syllableCount('years')); $this->assertEquals(2, $this->TextStatistics->syllableCount('ago')); $this->assertEquals(2, $this->TextStatistics->syllableCount('never')); $this->assertEquals(1, $this->TextStatistics->syllableCount('mind')); $this->assertEquals(1, $this->TextStatistics->syllableCount('how')); $this->assertEquals(1, $this->TextStatistics->syllableCount('long')); $this->assertEquals(3, $this->TextStatistics->syllableCount('precisely')); $this->assertEquals(2, $this->TextStatistics->syllableCount('having')); $this->assertEquals(2, $this->TextStatistics->syllableCount('little')); $this->assertEquals(1, $this->TextStatistics->syllableCount('or')); $this->assertEquals(1, $this->TextStatistics->syllableCount('no')); $this->assertEquals(2, $this->TextStatistics->syllableCount('money')); $this->assertEquals(1, $this->TextStatistics->syllableCount('in')); $this->assertEquals(1, $this->TextStatistics->syllableCount('my')); $this->assertEquals(1, $this->TextStatistics->syllableCount('purse')); $this->assertEquals(1, $this->TextStatistics->syllableCount('and')); $this->assertEquals(2, $this->TextStatistics->syllableCount('nothing')); $this->assertEquals(4, $this->TextStatistics->syllableCount('particular')); $this->assertEquals(1, $this->TextStatistics->syllableCount('to')); $this->assertEquals(3, $this->TextStatistics->syllableCount('interest')); $this->assertEquals(1, $this->TextStatistics->syllableCount('me')); $this->assertEquals(1, $this->TextStatistics->syllableCount('on')); $this->assertEquals(1, $this->TextStatistics->syllableCount('shore')); $this->assertEquals(1, $this->TextStatistics->syllableCount('I')); $this->assertEquals(1, $this->TextStatistics->syllableCount('thought')); $this->assertEquals(1, $this->TextStatistics->syllableCount('I')); $this->assertEquals(1, $this->TextStatistics->syllableCount('would')); $this->assertEquals(1, $this->TextStatistics->syllableCount('sail')); $this->assertEquals(2, $this->TextStatistics->syllableCount('about')); $this->assertEquals(1, $this->TextStatistics->syllableCount('a')); $this->assertEquals(2, $this->TextStatistics->syllableCount('little')); $this->assertEquals(1, $this->TextStatistics->syllableCount('and')); $this->assertEquals(1, $this->TextStatistics->syllableCount('see')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(3, $this->TextStatistics->syllableCount('watery')); $this->assertEquals(1, $this->TextStatistics->syllableCount('part')); $this->assertEquals(1, $this->TextStatistics->syllableCount('of')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(1, $this->TextStatistics->syllableCount('world')); $this->assertEquals(1, $this->TextStatistics->syllableCount('It')); $this->assertEquals(1, $this->TextStatistics->syllableCount('is')); $this->assertEquals(1, $this->TextStatistics->syllableCount('a')); $this->assertEquals(1, $this->TextStatistics->syllableCount('way')); $this->assertEquals(1, $this->TextStatistics->syllableCount('I')); $this->assertEquals(1, $this->TextStatistics->syllableCount('have')); $this->assertEquals(1, $this->TextStatistics->syllableCount('of')); $this->assertEquals(2, $this->TextStatistics->syllableCount('driving')); $this->assertEquals(1, $this->TextStatistics->syllableCount('off')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(1, $this->TextStatistics->syllableCount('spleen')); $this->assertEquals(1, $this->TextStatistics->syllableCount('and')); $this->assertEquals(4, $this->TextStatistics->syllableCount('regulating')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(4, $this->TextStatistics->syllableCount('circulation')); $this->assertEquals(3, $this->TextStatistics->syllableCount('Whenever')); $this->assertEquals(1, $this->TextStatistics->syllableCount('I')); $this->assertEquals(1, $this->TextStatistics->syllableCount('find')); $this->assertEquals(2, $this->TextStatistics->syllableCount('myself')); $this->assertEquals(2, $this->TextStatistics->syllableCount('growing')); $this->assertEquals(1, $this->TextStatistics->syllableCount('grim')); $this->assertEquals(2, $this->TextStatistics->syllableCount('about')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(1, $this->TextStatistics->syllableCount('mouth')); $this->assertEquals(3, $this->TextStatistics->syllableCount('whenever')); $this->assertEquals(1, $this->TextStatistics->syllableCount('it')); $this->assertEquals(1, $this->TextStatistics->syllableCount('is')); $this->assertEquals(1, $this->TextStatistics->syllableCount('a')); $this->assertEquals(1, $this->TextStatistics->syllableCount('damp')); $this->assertEquals(2, $this->TextStatistics->syllableCount('drizzly')); $this->assertEquals(3, $this->TextStatistics->syllableCount('November')); $this->assertEquals(1, $this->TextStatistics->syllableCount('in')); $this->assertEquals(1, $this->TextStatistics->syllableCount('my')); $this->assertEquals(1, $this->TextStatistics->syllableCount('soul')); $this->assertEquals(3, $this->TextStatistics->syllableCount('whenever')); $this->assertEquals(1, $this->TextStatistics->syllableCount('I')); $this->assertEquals(1, $this->TextStatistics->syllableCount('find')); $this->assertEquals(2, $this->TextStatistics->syllableCount('myself')); $this->assertEquals(6, $this->TextStatistics->syllableCount('involuntarily')); $this->assertEquals(2, $this->TextStatistics->syllableCount('pausing')); $this->assertEquals(2, $this->TextStatistics->syllableCount('before')); $this->assertEquals(2, $this->TextStatistics->syllableCount('coffin')); $this->assertEquals(3, $this->TextStatistics->syllableCount('warehouses')); $this->assertEquals(1, $this->TextStatistics->syllableCount('and')); $this->assertEquals(2, $this->TextStatistics->syllableCount('bringing')); $this->assertEquals(1, $this->TextStatistics->syllableCount('up')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(1, $this->TextStatistics->syllableCount('rear')); $this->assertEquals(1, $this->TextStatistics->syllableCount('of')); $this->assertEquals(3, $this->TextStatistics->syllableCount('every')); $this->assertEquals(3, $this->TextStatistics->syllableCount('funeral')); $this->assertEquals(1, $this->TextStatistics->syllableCount('I')); $this->assertEquals(1, $this->TextStatistics->syllableCount('meet')); $this->assertEquals(1, $this->TextStatistics->syllableCount('and')); $this->assertEquals(4, $this->TextStatistics->syllableCount('especially')); $this->assertEquals(3, $this->TextStatistics->syllableCount('whenever')); $this->assertEquals(1, $this->TextStatistics->syllableCount('my')); $this->assertEquals(2, $this->TextStatistics->syllableCount('hypos')); $this->assertEquals(1, $this->TextStatistics->syllableCount('get')); $this->assertEquals(1, $this->TextStatistics->syllableCount('such')); $this->assertEquals(1, $this->TextStatistics->syllableCount('an')); $this->assertEquals(2, $this->TextStatistics->syllableCount('upper')); $this->assertEquals(1, $this->TextStatistics->syllableCount('hand')); $this->assertEquals(1, $this->TextStatistics->syllableCount('of')); $this->assertEquals(1, $this->TextStatistics->syllableCount('me')); $this->assertEquals(1, $this->TextStatistics->syllableCount('that')); $this->assertEquals(1, $this->TextStatistics->syllableCount('it')); $this->assertEquals(2, $this->TextStatistics->syllableCount('requires')); $this->assertEquals(1, $this->TextStatistics->syllableCount('a')); $this->assertEquals(1, $this->TextStatistics->syllableCount('strong')); $this->assertEquals(2, $this->TextStatistics->syllableCount('moral')); $this->assertEquals(3, $this->TextStatistics->syllableCount('principle')); $this->assertEquals(1, $this->TextStatistics->syllableCount('to')); $this->assertEquals(2, $this->TextStatistics->syllableCount('prevent')); $this->assertEquals(1, $this->TextStatistics->syllableCount('me')); $this->assertEquals(1, $this->TextStatistics->syllableCount('from')); $this->assertEquals(5, $this->TextStatistics->syllableCount('deliberately')); $this->assertEquals(2, $this->TextStatistics->syllableCount('stepping')); $this->assertEquals(2, $this->TextStatistics->syllableCount('into')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(1, $this->TextStatistics->syllableCount('street')); $this->assertEquals(1, $this->TextStatistics->syllableCount('and')); $this->assertEquals(5, $this->TextStatistics->syllableCount('methodically')); $this->assertEquals(2, $this->TextStatistics->syllableCount('knocking')); $this->assertEquals(2, $this->TextStatistics->syllableCount('people\'s')); $this->assertEquals(1, $this->TextStatistics->syllableCount('hats')); $this->assertEquals(1, $this->TextStatistics->syllableCount('off')); $this->assertEquals(1, $this->TextStatistics->syllableCount('then')); $this->assertEquals(1, $this->TextStatistics->syllableCount('I')); $this->assertEquals(2, $this->TextStatistics->syllableCount('account')); $this->assertEquals(1, $this->TextStatistics->syllableCount('it')); $this->assertEquals(1, $this->TextStatistics->syllableCount('high')); $this->assertEquals(1, $this->TextStatistics->syllableCount('time')); $this->assertEquals(1, $this->TextStatistics->syllableCount('to')); $this->assertEquals(1, $this->TextStatistics->syllableCount('get')); $this->assertEquals(1, $this->TextStatistics->syllableCount('to')); $this->assertEquals(1, $this->TextStatistics->syllableCount('sea')); $this->assertEquals(1, $this->TextStatistics->syllableCount('as')); $this->assertEquals(1, $this->TextStatistics->syllableCount('soon')); $this->assertEquals(1, $this->TextStatistics->syllableCount('as')); $this->assertEquals(1, $this->TextStatistics->syllableCount('I')); $this->assertEquals(1, $this->TextStatistics->syllableCount('can')); $this->assertEquals(1, $this->TextStatistics->syllableCount('This')); $this->assertEquals(1, $this->TextStatistics->syllableCount('is')); $this->assertEquals(1, $this->TextStatistics->syllableCount('my')); $this->assertEquals(3, $this->TextStatistics->syllableCount('substitute')); $this->assertEquals(1, $this->TextStatistics->syllableCount('for')); $this->assertEquals(2, $this->TextStatistics->syllableCount('pistol')); $this->assertEquals(1, $this->TextStatistics->syllableCount('and')); $this->assertEquals(1, $this->TextStatistics->syllableCount('ball')); $this->assertEquals(1, $this->TextStatistics->syllableCount('With')); $this->assertEquals(1, $this->TextStatistics->syllableCount('a')); $this->assertEquals(5, $this->TextStatistics->syllableCount('philosophical')); $this->assertEquals(2, $this->TextStatistics->syllableCount('flourish')); $this->assertEquals(2, $this->TextStatistics->syllableCount('Cato')); $this->assertEquals(1, $this->TextStatistics->syllableCount('throws')); $this->assertEquals(2, $this->TextStatistics->syllableCount('himself')); $this->assertEquals(2, $this->TextStatistics->syllableCount('upon')); $this->assertEquals(1, $this->TextStatistics->syllableCount('his')); $this->assertEquals(1, $this->TextStatistics->syllableCount('sword')); $this->assertEquals(1, $this->TextStatistics->syllableCount('I')); $this->assertEquals(3, $this->TextStatistics->syllableCount('quietly')); $this->assertEquals(1, $this->TextStatistics->syllableCount('take')); $this->assertEquals(1, $this->TextStatistics->syllableCount('to')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(1, $this->TextStatistics->syllableCount('ship')); $this->assertEquals(1, $this->TextStatistics->syllableCount('There')); $this->assertEquals(1, $this->TextStatistics->syllableCount('is')); $this->assertEquals(2, $this->TextStatistics->syllableCount('nothing')); $this->assertEquals(3, $this->TextStatistics->syllableCount('surprising')); $this->assertEquals(1, $this->TextStatistics->syllableCount('in')); $this->assertEquals(1, $this->TextStatistics->syllableCount('this')); $this->assertEquals(1, $this->TextStatistics->syllableCount('If')); $this->assertEquals(1, $this->TextStatistics->syllableCount('they')); $this->assertEquals(1, $this->TextStatistics->syllableCount('but')); $this->assertEquals(1, $this->TextStatistics->syllableCount('knew')); $this->assertEquals(1, $this->TextStatistics->syllableCount('it')); $this->assertEquals(2, $this->TextStatistics->syllableCount('almost')); $this->assertEquals(1, $this->TextStatistics->syllableCount('all')); $this->assertEquals(1, $this->TextStatistics->syllableCount('men')); $this->assertEquals(1, $this->TextStatistics->syllableCount('in')); $this->assertEquals(1, $this->TextStatistics->syllableCount('their')); $this->assertEquals(2, $this->TextStatistics->syllableCount('degree')); $this->assertEquals(1, $this->TextStatistics->syllableCount('some')); $this->assertEquals(1, $this->TextStatistics->syllableCount('time')); $this->assertEquals(1, $this->TextStatistics->syllableCount('or')); $this->assertEquals(2, $this->TextStatistics->syllableCount('other')); $this->assertEquals(2, $this->TextStatistics->syllableCount('cherish')); $this->assertEquals(2, $this->TextStatistics->syllableCount('very')); $this->assertEquals(2, $this->TextStatistics->syllableCount('nearly')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(1, $this->TextStatistics->syllableCount('same')); $this->assertEquals(2, $this->TextStatistics->syllableCount('feelings')); $this->assertEquals(2, $this->TextStatistics->syllableCount('towards')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(2, $this->TextStatistics->syllableCount('ocean')); $this->assertEquals(1, $this->TextStatistics->syllableCount('with')); $this->assertEquals(1, $this->TextStatistics->syllableCount('me')); } /* Test Word Count -------------------- */ public function testWordCount() { $this->assertEquals(201, $this->TextStatistics->wordCount($this->strText)); } /* Test Long Word Count -------------------- */ public function testLongWordCount() { $this->assertEquals(23, $this->TextStatistics->wordsWithThreeSyllables($this->strText, true)); // Include proper nouns $this->assertEquals(22, $this->TextStatistics->wordsWithThreeSyllables($this->strText, false)); // Don't include proper nouns } /* Test Sentences -------------------- */ public function testSentenceCount() { $this->assertEquals(8, $this->TextStatistics->sentenceCount($this->strText)); } /* Test Letter Count -------------------- */ public function testTextLengthCheck() { $this->assertEquals(884, $this->TextStatistics->letterCount($this->strText)); } /* Test Flesch Kincaid Reading Ease -------------------- */ public function testFleschKincaidReadingEase() { $this->assertEquals(53.4, $this->TextStatistics->flesch_kincaid_reading_ease($this->strText)); } /* Test Flesch Kincaid Grade Level -------------------- */ public function testFleschKincaidGradeLevel() { $this->assertEquals(12.1, $this->TextStatistics->flesch_kincaid_grade_level($this->strText)); } /* Test Gunning Fog Score -------------------- */ public function testGunningFogScore() { $this->assertEquals(14.4, $this->TextStatistics->gunning_fog_score($this->strText)); } /* Test Coleman Liau Index -------------------- */ public function testColemanLiauIndex() { $this->assertEquals(10.1, $this->TextStatistics->coleman_liau_index($this->strText)); } /* Test SMOG Index -------------------- */ public function testSMOGIndex() { $this->assertEquals(9.9, $this->TextStatistics->smog_index($this->strText)); } /* Test Automated Readability Index -------------------- */ public function testAutomatedReadabilityIndex() { $this->assertEquals(11.8, $this->TextStatistics->automated_readability_index($this->strText)); } } ================================================ FILE: vendor/davechild/textstatistics/tests/TextStatisticsPluralise.php ================================================ TextStatistics = new DaveChild\TextStatistics\TextStatistics(); $this->TextStatistics->normalise = false; } public function tearDown() { unset($this->objTextStatistics); } /* Test Pluralisation -------------------- */ public function testPluralisation() { $this->assertEquals('geese', DaveChild\TextStatistics\Pluralise::getPlural('goose')); $this->assertEquals('mice', DaveChild\TextStatistics\Pluralise::getPlural('mouse')); $this->assertEquals('houses', DaveChild\TextStatistics\Pluralise::getPlural('house')); $this->assertEquals('bananas', DaveChild\TextStatistics\Pluralise::getPlural('banana')); $this->assertEquals('quizzes', DaveChild\TextStatistics\Pluralise::getPlural('quiz')); $this->assertEquals('geese', DaveChild\TextStatistics\Pluralise::getPlural('geese')); $this->assertEquals('mice', DaveChild\TextStatistics\Pluralise::getPlural('mice')); $this->assertEquals('houses', DaveChild\TextStatistics\Pluralise::getPlural('houses')); $this->assertEquals('bananas', DaveChild\TextStatistics\Pluralise::getPlural('bananas')); $this->assertEquals('quizzes', DaveChild\TextStatistics\Pluralise::getPlural('quizzes')); $this->assertEquals('buffalo', DaveChild\TextStatistics\Pluralise::getPlural('buffalo')); $this->assertEquals('money', DaveChild\TextStatistics\Pluralise::getPlural('money')); } /* Test Singularisations -------------------- */ public function testSingularisation() { $this->assertEquals('goose', DaveChild\TextStatistics\Pluralise::getSingular('goose')); $this->assertEquals('mouse', DaveChild\TextStatistics\Pluralise::getSingular('mouse')); $this->assertEquals('house', DaveChild\TextStatistics\Pluralise::getSingular('house')); $this->assertEquals('banana', DaveChild\TextStatistics\Pluralise::getSingular('banana')); $this->assertEquals('quiz', DaveChild\TextStatistics\Pluralise::getSingular('quiz')); $this->assertEquals('goose', DaveChild\TextStatistics\Pluralise::getSingular('geese')); $this->assertEquals('mouse', DaveChild\TextStatistics\Pluralise::getSingular('mice')); $this->assertEquals('house', DaveChild\TextStatistics\Pluralise::getSingular('houses')); $this->assertEquals('banana', DaveChild\TextStatistics\Pluralise::getSingular('bananas')); $this->assertEquals('quiz', DaveChild\TextStatistics\Pluralise::getSingular('quizzes')); $this->assertEquals('buffalo', DaveChild\TextStatistics\Pluralise::getPlural('buffalo')); $this->assertEquals('money', DaveChild\TextStatistics\Pluralise::getPlural('money')); } } ================================================ FILE: vendor/davechild/textstatistics/tests/TextStatisticsTest.php ================================================ TextStatistics = new DaveChild\TextStatistics\TextStatistics(); $this->TextStatistics->normalise = false; } public function tearDown() { unset($this->objTextStatistics); } /* Test Cleaning of text -------------------- */ public function testCleaning() { $this->assertSame('', DaveChild\TextStatistics\Text::cleanText(false)); $this->assertSame('There once was a little sausage named Baldrick. and he lived happily ever after.', DaveChild\TextStatistics\Text::cleanText('There once was a little sausage named Baldrick. . . . And he lived happily ever after.!! !??')); } /* Test Case changes -------------------- */ public function testCases() { $this->assertSame('banana', DaveChild\TextStatistics\Text::lowerCase('banana')); $this->assertSame('banana', DaveChild\TextStatistics\Text::lowerCase('Banana')); $this->assertSame('banana', DaveChild\TextStatistics\Text::lowerCase('BanAna')); $this->assertSame('banana', DaveChild\TextStatistics\Text::lowerCase('BANANA')); $this->assertSame('BANANA', DaveChild\TextStatistics\Text::upperCase('banana')); $this->assertSame('BANANA', DaveChild\TextStatistics\Text::upperCase('Banana')); $this->assertSame('BANANA', DaveChild\TextStatistics\Text::upperCase('BanAna')); $this->assertSame('BANANA', DaveChild\TextStatistics\Text::upperCase('BANANA')); } /* Test Counts -------------------- */ public function testCounts() { $this->assertSame(47, DaveChild\TextStatistics\Text::characterCount('There once was a little sausage named Baldrick.')); $this->assertSame(47, DaveChild\TextStatistics\Text::textLength('There once was a little sausage named Baldrick.')); $this->assertSame(39, DaveChild\TextStatistics\Text::letterCount('There once was a little sausage named Baldrick.')); $this->assertSame(0, DaveChild\TextStatistics\Text::letterCount('')); $this->assertSame(0, DaveChild\TextStatistics\Text::letterCount(' ')); $this->assertSame(0, DaveChild\TextStatistics\Text::wordCount('')); $this->assertSame(0, DaveChild\TextStatistics\Text::wordCount(' ')); $this->assertSame(0, DaveChild\TextStatistics\Text::sentenceCount('')); $this->assertSame(0, DaveChild\TextStatistics\Text::sentenceCount(' ')); $this->assertSame(1, $this->TextStatistics->letterCount('a')); // Reset text before running second letter count check or it will use preset text of "a" $this->TextStatistics->setText(''); $this->assertSame(0, $this->TextStatistics->letterCount('')); $this->assertSame(46, $this->TextStatistics->letterCount('this sentence has 30 characters, not including the digits')); } /* Test Syllables -------------------- */ public function testSyllableCountBasicWords() { // "Normal" words $this->assertEquals(0, $this->TextStatistics->syllableCount('.')); $this->assertEquals(1, $this->TextStatistics->syllableCount('a')); $this->assertEquals(1, $this->TextStatistics->syllableCount('was')); $this->assertEquals(1, $this->TextStatistics->syllableCount('the')); $this->assertEquals(1, $this->TextStatistics->syllableCount('and')); $this->assertEquals(2, $this->TextStatistics->syllableCount('foobar')); $this->assertEquals(2, $this->TextStatistics->syllableCount('hello')); $this->assertEquals(1, $this->TextStatistics->syllableCount('world')); $this->assertEquals(3, $this->TextStatistics->syllableCount('wonderful')); $this->assertEquals(2, $this->TextStatistics->syllableCount('simple')); $this->assertEquals(2, $this->TextStatistics->syllableCount('easy')); $this->assertEquals(1, $this->TextStatistics->syllableCount('hard')); $this->assertEquals(1, $this->TextStatistics->syllableCount('quick')); $this->assertEquals(1, $this->TextStatistics->syllableCount('brown')); $this->assertEquals(1, $this->TextStatistics->syllableCount('fox')); $this->assertEquals(1, $this->TextStatistics->syllableCount('jumped')); $this->assertEquals(2, $this->TextStatistics->syllableCount('over')); $this->assertEquals(2, $this->TextStatistics->syllableCount('lazy')); $this->assertEquals(1, $this->TextStatistics->syllableCount('dog')); $this->assertEquals(3, $this->TextStatistics->syllableCount('camera')); } public function testSyllableCountComplexWords() { // Odd syllables, long words, difficult sounds $this->assertEquals(12, $this->TextStatistics->syllableCount('antidisestablishmentarianism')); $this->assertEquals(14, $this->TextStatistics->syllableCount('supercalifragilisticexpialidocious')); $this->assertEquals(8, $this->TextStatistics->syllableCount('chlorofluorocarbonation')); $this->assertEquals(4, $this->TextStatistics->syllableCount('forethoughtfulness')); $this->assertEquals(4, $this->TextStatistics->syllableCount('phosphorescent')); $this->assertEquals(5, $this->TextStatistics->syllableCount('theoretician')); $this->assertEquals(5, $this->TextStatistics->syllableCount('promiscuity')); $this->assertEquals(4, $this->TextStatistics->syllableCount('unbutlering')); $this->assertEquals(5, $this->TextStatistics->syllableCount('continuity')); $this->assertEquals(1, $this->TextStatistics->syllableCount('craunched')); $this->assertEquals(1, $this->TextStatistics->syllableCount('squelched')); $this->assertEquals(1, $this->TextStatistics->syllableCount('scrounge')); $this->assertEquals(1, $this->TextStatistics->syllableCount('coughed')); $this->assertEquals(1, $this->TextStatistics->syllableCount('smile')); $this->assertEquals(4, $this->TextStatistics->syllableCount('monopoly')); $this->assertEquals(2, $this->TextStatistics->syllableCount('doughey')); $this->assertEquals(3, $this->TextStatistics->syllableCount('doughier')); $this->assertEquals(4, $this->TextStatistics->syllableCount('leguminous')); $this->assertEquals(3, $this->TextStatistics->syllableCount('thoroughbreds')); $this->assertEquals(2, $this->TextStatistics->syllableCount('special')); $this->assertEquals(3, $this->TextStatistics->syllableCount('delicious')); $this->assertEquals(2, $this->TextStatistics->syllableCount('spatial')); $this->assertEquals(4, $this->TextStatistics->syllableCount('pacifism')); $this->assertEquals(4, $this->TextStatistics->syllableCount('coagulant')); $this->assertEquals(2, $this->TextStatistics->syllableCount('shouldn\'t')); $this->assertEquals(3, $this->TextStatistics->syllableCount('mcdonald')); $this->assertEquals(3, $this->TextStatistics->syllableCount('audience')); $this->assertEquals(2, $this->TextStatistics->syllableCount('finance')); $this->assertEquals(3, $this->TextStatistics->syllableCount('prevalence')); $this->assertEquals(5, $this->TextStatistics->syllableCount('impropriety')); $this->assertEquals(3, $this->TextStatistics->syllableCount('alien')); $this->assertEquals(2, $this->TextStatistics->syllableCount('dreadnought')); $this->assertEquals(3, $this->TextStatistics->syllableCount('verandah')); $this->assertEquals(3, $this->TextStatistics->syllableCount('similar')); $this->assertEquals(4, $this->TextStatistics->syllableCount('similarly')); $this->assertEquals(2, $this->TextStatistics->syllableCount('central')); $this->assertEquals(1, $this->TextStatistics->syllableCount('cyst')); $this->assertEquals(1, $this->TextStatistics->syllableCount('term')); $this->assertEquals(2, $this->TextStatistics->syllableCount('order')); $this->assertEquals(1, $this->TextStatistics->syllableCount('fur')); $this->assertEquals(2, $this->TextStatistics->syllableCount('sugar')); $this->assertEquals(2, $this->TextStatistics->syllableCount('paper')); $this->assertEquals(1, $this->TextStatistics->syllableCount('make')); $this->assertEquals(1, $this->TextStatistics->syllableCount('gem')); $this->assertEquals(2, $this->TextStatistics->syllableCount('program')); $this->assertEquals(2, $this->TextStatistics->syllableCount('hopeless')); $this->assertEquals(3, $this->TextStatistics->syllableCount('hopelessly')); $this->assertEquals(2, $this->TextStatistics->syllableCount('careful')); $this->assertEquals(3, $this->TextStatistics->syllableCount('carefully')); $this->assertEquals(2, $this->TextStatistics->syllableCount('stuffy')); $this->assertEquals(2, $this->TextStatistics->syllableCount('thistle')); $this->assertEquals(2, $this->TextStatistics->syllableCount('teacher')); $this->assertEquals(3, $this->TextStatistics->syllableCount('unhappy')); $this->assertEquals(5, $this->TextStatistics->syllableCount('ambiguity')); $this->assertEquals(4, $this->TextStatistics->syllableCount('validity')); $this->assertEquals(4, $this->TextStatistics->syllableCount('ambiguous')); $this->assertEquals(2, $this->TextStatistics->syllableCount('deserve')); $this->assertEquals(2, $this->TextStatistics->syllableCount('blooper')); $this->assertEquals(1, $this->TextStatistics->syllableCount('scooped')); $this->assertEquals(2, $this->TextStatistics->syllableCount('deserve')); $this->assertEquals(1, $this->TextStatistics->syllableCount('deal')); $this->assertEquals(1, $this->TextStatistics->syllableCount('death')); $this->assertEquals(1, $this->TextStatistics->syllableCount('dearth')); $this->assertEquals(1, $this->TextStatistics->syllableCount('deign')); $this->assertEquals(1, $this->TextStatistics->syllableCount('reign')); $this->assertEquals(2, $this->TextStatistics->syllableCount('bedsore')); $this->assertEquals(5, $this->TextStatistics->syllableCount('anorexia')); $this->assertEquals(3, $this->TextStatistics->syllableCount('anymore')); $this->assertEquals(1, $this->TextStatistics->syllableCount('cored')); $this->assertEquals(1, $this->TextStatistics->syllableCount('sore')); $this->assertEquals(2, $this->TextStatistics->syllableCount('foremost')); $this->assertEquals(2, $this->TextStatistics->syllableCount('restore')); $this->assertEquals(2, $this->TextStatistics->syllableCount('minute')); $this->assertEquals(3, $this->TextStatistics->syllableCount('manticores')); $this->assertEquals(4, $this->TextStatistics->syllableCount('asparagus')); $this->assertEquals(3, $this->TextStatistics->syllableCount('unexplored')); $this->assertEquals(4, $this->TextStatistics->syllableCount('unexploded')); $this->assertEquals(3, $this->TextStatistics->syllableCount('CAPITALS')); } // These are fairly common words that are exceptions to given rules and that can not // easily be programmed for. I've added them here for documentation purposes as much // as anything else. If you find a way to program rules for any of these, move them // into the section above. Many compound words will end up here. public function testSyllableCountProgrammedExceptions() { $this->assertEquals(3, $this->TextStatistics->syllableCount('simile')); // Compounds that have caused problems so far // Problem: far too many compound words to list exhaustively. $this->assertEquals(2, $this->TextStatistics->syllableCount('shoreline')); $this->assertEquals(3, $this->TextStatistics->syllableCount('forever')); } public function testAverageSyllablesPerWord() { $this->assertEquals(1, $this->TextStatistics->averageSyllablesPerWord('and then there was one')); $this->assertEquals(2, $this->TextStatistics->averageSyllablesPerWord('because special ducklings deserve rainbows')); $this->assertEquals(1.5, $this->TextStatistics->averageSyllablesPerWord('and then there was one because special ducklings deserve rainbows')); } /* Test Words -------------------- */ public function testWordCount() { $this->assertEquals(9, $this->TextStatistics->wordCount('The quick brown fox jumps over the lazy dog')); $this->assertEquals(9, $this->TextStatistics->wordCount('The quick brown fox jumps over the lazy dog.')); $this->assertEquals(9, $this->TextStatistics->wordCount('The quick brown fox jumps over the lazy dog. ')); $this->assertEquals(9, $this->TextStatistics->wordCount(' The quick brown fox jumps over the lazy dog. ')); $this->assertEquals(9, $this->TextStatistics->wordCount(' The quick brown fox jumps over the lazy dog. ')); $this->assertEquals(2, $this->TextStatistics->wordCount('Yes. No.')); $this->assertEquals(2, $this->TextStatistics->wordCount('Yes.No.')); $this->assertEquals(2, $this->TextStatistics->wordCount('Yes.No.')); $this->assertEquals(2, $this->TextStatistics->wordCount('Yes . No.')); $this->assertEquals(2, $this->TextStatistics->wordCount('Yes .No.')); $this->assertEquals(2, $this->TextStatistics->wordCount('Yes - No. ')); } public function testCheckPercentageWordsWithThreeSyllables() { $this->assertEquals(9, number_format($this->TextStatistics->percentageWordsWithThreeSyllables('there is just one word with three syllables in this sentence'))); $this->assertEquals(9, number_format($this->TextStatistics->percentageWordsWithThreeSyllables('there is just one word with three syllables in this sentence', true))); $this->assertEquals(0, number_format($this->TextStatistics->percentageWordsWithThreeSyllables('there are no valid words with three Syllables in this sentence', false))); $this->assertEquals(5, number_format($this->TextStatistics->percentageWordsWithThreeSyllables('there is one and only one word with three or more syllables in this long boring sentence of twenty words'))); $this->assertEquals(10, number_format($this->TextStatistics->percentageWordsWithThreeSyllables('there are two and only two words with three or more syllables in this long sentence of exactly twenty words'))); $this->assertEquals(5, number_format($this->TextStatistics->percentageWordsWithThreeSyllables('there is Actually only one valid word with three or more syllables in this long sentence of Exactly twenty words', false))); $this->assertEquals(0, number_format($this->TextStatistics->percentageWordsWithThreeSyllables('no long words in this sentence'))); $this->assertEquals(0, number_format($this->TextStatistics->percentageWordsWithThreeSyllables('no long valid words in this sentence because the test ignores proper case words like this Behemoth', false))); } /* Test Sentences -------------------- */ public function testSentenceCount() { $this->assertEquals(1, $this->TextStatistics->sentenceCount('This is a sentence')); $this->assertEquals(1, $this->TextStatistics->sentenceCount('This is a sentence.')); $this->assertEquals(1, $this->TextStatistics->sentenceCount('This is a sentence!')); $this->assertEquals(1, $this->TextStatistics->sentenceCount('This is a sentence?')); $this->assertEquals(1, $this->TextStatistics->sentenceCount('This is a sentence..')); $this->assertEquals(2, $this->TextStatistics->sentenceCount('This is a sentence. So is this.')); $this->assertEquals(2, $this->TextStatistics->sentenceCount("This is a sentence. \n\n So is this, but this is multi-line!")); $this->assertEquals(2, $this->TextStatistics->sentenceCount('This is a sentence,. So is this.')); $this->assertEquals(2, $this->TextStatistics->sentenceCount('This is a sentence!? So is this.')); $this->assertEquals(3, $this->TextStatistics->sentenceCount('This is a sentence. So is this. And this one as well.')); $this->assertEquals(1, $this->TextStatistics->sentenceCount('This is a sentence - but just one.')); $this->assertEquals(1, $this->TextStatistics->sentenceCount('This is a sentence (but just one).')); } public function testAverageWordsPerSentence() { $this->assertEquals(4, $this->TextStatistics->averageWordsPerSentence('This is a sentence')); $this->assertEquals(4, $this->TextStatistics->averageWordsPerSentence('This is a sentence.')); $this->assertEquals(4, $this->TextStatistics->averageWordsPerSentence('This is a sentence. ')); $this->assertEquals(4, $this->TextStatistics->averageWordsPerSentence('This is a sentence. This is a sentence')); $this->assertEquals(4, $this->TextStatistics->averageWordsPerSentence('This is a sentence. This is a sentence.')); $this->assertEquals(4, $this->TextStatistics->averageWordsPerSentence('This, is - a sentence . This is a sentence. ')); $this->assertEquals(5.5, $this->TextStatistics->averageWordsPerSentence('This is a sentence with extra text. This is a sentence. ')); $this->assertEquals(6, $this->TextStatistics->averageWordsPerSentence('This is a sentence with some extra text. This is a sentence. ')); } /* Test Scores -------------------- */ // Please note that scores for all of these sentences and scoring systems have all been calculated by hand and should therefore be accurate. // All values have been rounded to a single decimal point. PHP can be temperamental when it comes to floats. public function testFleschKincaidReadingEase() { $this->assertEquals(121.2, $this->TextStatistics->flesch_kincaid_reading_ease('This. Is. A. Nice. Set. Of. Small. Words. Of. One. Part. Each.')); // Best score possible $this->assertEquals(94.3, $this->TextStatistics->flesch_kincaid_reading_ease('The quick brown fox jumps over the lazy dog.')); $this->assertEquals(94.3, $this->TextStatistics->flesch_kincaid_reading_ease('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.')); $this->assertEquals(94.3, $this->TextStatistics->flesch_kincaid_reading_ease('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog')); $this->assertEquals(94.3, $this->TextStatistics->flesch_kincaid_reading_ease("The quick brown fox jumps over the lazy dog. \n\n The quick brown fox jumps over the lazy dog.")); $this->assertEquals(50.5, $this->TextStatistics->flesch_kincaid_reading_ease('Now it is time for a more complicated sentence, including several longer words.')); } public function testFleschKincaidGradeLevel() { $this->assertEquals(-3.4, $this->TextStatistics->flesch_kincaid_grade_level('This. Is. A. Nice. Set. Of. Small. Words. Of. One. Part. Each.')); // Best score possible $this->assertEquals(2.3, $this->TextStatistics->flesch_kincaid_grade_level('The quick brown fox jumps over the lazy dog.')); $this->assertEquals(2.3, $this->TextStatistics->flesch_kincaid_grade_level('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.')); $this->assertEquals(2.3, $this->TextStatistics->flesch_kincaid_grade_level('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog')); $this->assertEquals(2.3, $this->TextStatistics->flesch_kincaid_grade_level("The quick brown fox jumps over the lazy dog. \n\n The quick brown fox jumps over the lazy dog.")); $this->assertEquals(9.4, $this->TextStatistics->flesch_kincaid_grade_level('Now it is time for a more complicated sentence, including several longer words.')); } public function testGunningFogScore() { $this->assertEquals(0.4, $this->TextStatistics->gunning_fog_score('This. Is. A. Nice. Set. Of. Small. Words. Of. One. Part. Each.')); // Best possible score $this->assertEquals(3.6, $this->TextStatistics->gunning_fog_score('The quick brown fox jumps over the lazy dog.')); $this->assertEquals(3.6, $this->TextStatistics->gunning_fog_score('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.')); $this->assertEquals(3.6, $this->TextStatistics->gunning_fog_score("The quick brown fox jumps over the lazy dog. \n\n The quick brown fox jumps over the lazy dog.")); $this->assertEquals(3.6, $this->TextStatistics->gunning_fog_score('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog')); $this->assertEquals(14.4, $this->TextStatistics->gunning_fog_score('Now it is time for a more complicated sentence, including several longer words.')); $this->assertEquals(8.3, $this->TextStatistics->gunning_fog_score('Now it is time for a more Complicated sentence, including Several longer words.')); // Two proper nouns, ignored } public function testColemanLiauIndex() { $this->assertEquals(3.0, $this->TextStatistics->coleman_liau_index('This. Is. A. Nice. Set. Of. Small. Words. Of. One. Part. Each.')); // Best possible score would be if all words were 1 character $this->assertEquals(7.1, $this->TextStatistics->coleman_liau_index('The quick brown fox jumps over the lazy dog.')); $this->assertEquals(7.1, $this->TextStatistics->coleman_liau_index('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.')); $this->assertEquals(7.1, $this->TextStatistics->coleman_liau_index("The quick brown fox jumps over the lazy dog. \n\n The quick brown fox jumps over the lazy dog.")); $this->assertEquals(7.1, $this->TextStatistics->coleman_liau_index('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog')); $this->assertEquals(13.6, $this->TextStatistics->coleman_liau_index('Now it is time for a more complicated sentence, including several longer words.')); } public function testSMOGIndex() { $this->assertEquals(1.8, $this->TextStatistics->smog_index('This. Is. A. Nice. Set. Of. Small. Words. Of. One. Part. Each.')); // Should be 1.8 for any text with no words of 3+ syllables $this->assertEquals(1.8, $this->TextStatistics->smog_index('The quick brown fox jumps over the lazy dog.')); $this->assertEquals(1.8, $this->TextStatistics->smog_index('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.')); $this->assertEquals(1.8, $this->TextStatistics->smog_index("The quick brown fox jumps over the lazy dog. \n\n The quick brown fox jumps over the lazy dog.")); $this->assertEquals(1.8, $this->TextStatistics->smog_index('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog')); $this->assertEquals(10.1, $this->TextStatistics->smog_index('Now it is time for a more complicated sentence, including several longer words.')); } public function testAutomatedReadabilityIndex() { $this->assertEquals(-5.6, $this->TextStatistics->automated_readability_index('This. Is. A. Nice. Set. Of. Small. Words. Of. One. Part. Each.')); $this->assertEquals(1.4, $this->TextStatistics->automated_readability_index('The quick brown fox jumps over the lazy dog.')); $this->assertEquals(1.4, $this->TextStatistics->automated_readability_index('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.')); $this->assertEquals(1.4, $this->TextStatistics->automated_readability_index("The quick brown fox jumps over the lazy dog. \n\n The quick brown fox jumps over the lazy dog.")); $this->assertEquals(1.4, $this->TextStatistics->automated_readability_index('The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog')); $this->assertEquals(8.6, $this->TextStatistics->automated_readability_index('Now it is time for a more complicated sentence, including several longer words.')); } } ================================================ FILE: vendor/sunra/php-simple-html-dom-parser/README.md ================================================ php-simple-html-dom-parser ========================== Version 1.5 Adaptation for Composer and PSR-0 of: A HTML DOM parser written in PHP5+ let you manipulate HTML in a very easy way! Require PHP 5+. Supports invalid HTML. Find tags on an HTML page with selectors just like jQuery. Extract contents from HTML in a single line. http://simplehtmldom.sourceforge.net/ Install ------- composer.phar ```json "require": { "sunra/php-simple-html-dom-parser": "v1.5.0" } ``` Usage ----- ```php use Sunra\PhpSimple\HtmlDomParser; ... $dom = HtmlDomParser::str_get_html( $str ); or $dom = HtmlDomParser::file_get_html( $file_name ); $elems = $dom->find($elem_name); ... ``` ================================================ FILE: vendor/sunra/php-simple-html-dom-parser/Src/Sunra/PhpSimple/HtmlDomParser.php ================================================ . 7. Fixed bug #2207477 (does not load some pages properly). 8. Fixed bug #2315853 (Error with character after < sign). [PHP Simple HTML DOM Parser v1.10 is released] 1. Negative indexes supports of "find" method, thanks for Vadim Voituk. 2. Constructor with automatically load contents either text or file/url, thanks for Antcs. 3. Fully supports wildcard in selectors. 4. Fixed bug of confusing by the < symbol inside the text. 5. Fixed bug of dash in selectors. 6. Fixed bug of . 7. Fixed bug #2155883 (Nested List Parses Incorrectly). 8. Fixed bug #2155113 (error with unclosed html tags). [PHP Simple HTML DOM Parser v1.00 is released] 1. New method "getAllAttributes" of "simple_html_dom_node". 2. Fix the bug of selector in some critical conditions. 3. Fix the bug of striping php tags. 4. Fix the bug of remove_noise(). 5. Fix the bug of noise in attributes. 6. Supports full javascript string in selector: $e->find("a[onclick=alert('hello')]"). 7. Change selector "*=" to case-insentive. [PHP Simple HTML DOM Parser v0.99 is released] 1. Performance turning (boost 10%). 2. Memory requirement reduce 25%. 3. Change function name from "file_get_dom()" to "file_get_html()". 4. Change function name from "str_get_dom()" to "str_get_html()". 5. Fixed bug #2011286 (Error with unclosed html tags). 6. Fixed bug #2012551 (Error parsing divs). 7. Fixed bug #2020924 (Error for missed tag.). 8. Fixed bug (problem with tag's innertext). [PHP Simple HTML DOM Parser v0.98 is released] 1. Performance turning (boost 20%). 2. Supports "multiple class" selector feature:
. 3. New "callback function" feature. 4. New "multiple selectors" feature: $dom->find('p,a,b'); 5. New examples. 6. Supports extract contents from HTML features: $dom->plaintext; 7. Fix the bug of $dom->clear(). 8. Fix the bug of text nodes' innertext. 9. Fix the bug of comment nodes' innertext. 10. Fix the bug of decendent selector with optional tags. 11. Change simple_html_dom_node method name from "text()" to "makeup()". [PHP Simple HTML DOM Parser v0.97 is released] 1. Important!! file and class name changed (html_dom_parser->simple_html_dom)! 2. Important!! ($dom->save_file) will not support anymore. 3. New node type "comment" (eg. $dom->find('comment')). 4. Add self-closing tags: 'base', 'spacer'. 5. Fix the bug of outertext (th). 6. Fix the bug of regular expression escaping chars ($dom->find). 7. Fix the bug while line-breaker and "\t" in tags. 8. Remove example "example_customize_parser.php". 9. New example "simple_html_dom_utility.php". [PHP Simple HTML DOM Parser v0.96 is released] 1. (Request #1936000) New DOM operations(first_child, last_child, next_sibling, previous_sibling). 2. New method to remove attribute. 3. Add the solution while server behind proxy in FAQ (Thanks to Yousuke Shaggy). 4. Add traverse section in manual. 5. Now file_get_dom supports full file_get_contents parameters. 6. Fix the bug of self-closing tags in the end of file. 7. Fix the bug of blanks in the end of tag. 8. Add Reference section in manual. #. Fix some typo of testcase. [PHP Simple HTML DOM Parser v0.95 is released] 1. New attribute filters (Thanks to Yousuke Kumakura). 2. Fix the bug of optional-closing tags. 3. Fix the bug of parsing the line break next to the tag's name. 4. Supports tag name with namespace. #. Refine structure of testcase. [PHP Simple HTML DOM Parser v0.94 is released] 1. Stop infinity loop while tthe source content is BAD HTML. 2. Fix the bug of adding new attributes to self closing tags. 3. Fix the bug of customize parser without $dom->remove_noise(); 4. Add FAQ section in manual. ================================================ FILE: vendor/sunra/php-simple-html-dom-parser/Src/Sunra/PhpSimple/simplehtmldom_1_5/simple_html_dom.php ================================================ size is the "real" number of bytes the dom was created from. * but for most purposes, it's a really good estimation. * Paperg - Added the forceTagsClosed to the dom constructor. Forcing tags closed is great for malformed html, but it CAN lead to parsing errors. * Allow the user to tell us how much they trust the html. * Paperg add the text and plaintext to the selectors for the find syntax. plaintext implies text in the innertext of a node. text implies that the tag is a text node. * This allows for us to find tags based on the text they contain. * Create find_ancestor_tag to see if a tag is - at any level - inside of another specific tag. * Paperg: added parse_charset so that we know about the character set of the source document. * NOTE: If the user's system has a routine called get_last_retrieve_url_contents_content_type availalbe, we will assume it's returning the content-type header from the * last transfer or curl_exec, and we will parse that and use it in preference to any other method of charset detection. * * Found infinite loop in the case of broken html in restore_noise. Rewrote to protect from that. * PaperG (John Schlick) Added get_display_size for "IMG" tags. * * Licensed under The MIT License * Redistributions of files must retain the above copyright notice. * * @author S.C. Chen * @author John Schlick * @author Rus Carroll * @version 1.5 ($Rev: 196 $) * @package PlaceLocalInclude * @subpackage simple_html_dom */ /** * All of the Defines for the classes below. * @author S.C. Chen */ define('HDOM_TYPE_ELEMENT', 1); define('HDOM_TYPE_COMMENT', 2); define('HDOM_TYPE_TEXT', 3); define('HDOM_TYPE_ENDTAG', 4); define('HDOM_TYPE_ROOT', 5); define('HDOM_TYPE_UNKNOWN', 6); define('HDOM_QUOTE_DOUBLE', 0); define('HDOM_QUOTE_SINGLE', 1); define('HDOM_QUOTE_NO', 3); define('HDOM_INFO_BEGIN', 0); define('HDOM_INFO_END', 1); define('HDOM_INFO_QUOTE', 2); define('HDOM_INFO_SPACE', 3); define('HDOM_INFO_TEXT', 4); define('HDOM_INFO_INNER', 5); define('HDOM_INFO_OUTER', 6); define('HDOM_INFO_ENDSPACE',7); define('DEFAULT_TARGET_CHARSET', 'UTF-8'); define('DEFAULT_BR_TEXT', "\r\n"); define('DEFAULT_SPAN_TEXT', ", "); if (!defined('MAX_FILE_SIZE')) { define('MAX_FILE_SIZE', 4000000); } // helper functions // ----------------------------------------------------------------------------- // get html dom from file // $maxlen is defined in the code as PHP_STREAM_COPY_ALL which is defined as -1. function file_get_html($url, $use_include_path = false, $context=null, $offset = 0, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) { // We DO force the tags to be terminated. $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText); // For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done. $contents = @file_get_contents($url, $use_include_path, $context, $offset); // Paperg - use our own mechanism for getting the contents as we want to control the timeout. //$contents = retrieve_url_contents($url); if (empty($contents) || strlen($contents) > MAX_FILE_SIZE) { return false; } // The second parameter can force the selectors to all be lowercase. $dom->load($contents, $lowercase, $stripRN); return $dom; } // get html dom from string function str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) { $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText); if (empty($str) || strlen($str) > MAX_FILE_SIZE) { $dom->clear(); return false; } $dom->load($str, $lowercase, $stripRN); return $dom; } // dump html dom tree function dump_html_tree($node, $show_attr=true, $deep=0) { $node->dump($node); } /** * simple html dom node * PaperG - added ability for "find" routine to lowercase the value of the selector. * PaperG - added $tag_start to track the start position of the tag in the total byte index * * @package PlaceLocalInclude */ class simple_html_dom_node { public $nodetype = HDOM_TYPE_TEXT; public $tag = 'text'; public $attr = array(); /** @var simple_html_dom_node[] $children */ public $children = array(); public $nodes = array(); public $parent = null; // The "info" array - see HDOM_INFO_... for what each element contains. public $_ = array(); public $tag_start = 0; private $dom = null; function __construct($dom) { $this->dom = $dom; $dom->nodes[] = $this; } function __destruct() { $this->clear(); } function __toString() { return $this->outertext(); } // clean up memory due to php5 circular references memory leak... function clear() { $this->dom = null; $this->nodes = null; $this->parent = null; $this->children = null; } // dump node's tree function dump($show_attr=true, $deep=0) { $lead = str_repeat(' ', $deep); echo $lead.$this->tag; if ($show_attr && count($this->attr)>0) { echo '('; foreach ($this->attr as $k=>$v) echo "[$k]=>\"".$this->$k.'", '; echo ')'; } echo "\n"; if ($this->nodes) { foreach ($this->nodes as $c) { $c->dump($show_attr, $deep+1); } } } // Debugging function to dump a single dom node with a bunch of information about it. function dump_node($echo=true) { $string = $this->tag; if (count($this->attr)>0) { $string .= '('; foreach ($this->attr as $k=>$v) { $string .= "[$k]=>\"".$this->$k.'", '; } $string .= ')'; } if (count($this->_)>0) { $string .= ' $_ ('; foreach ($this->_ as $k=>$v) { if (is_array($v)) { $string .= "[$k]=>("; foreach ($v as $k2=>$v2) { $string .= "[$k2]=>\"".$v2.'", '; } $string .= ")"; } else { $string .= "[$k]=>\"".$v.'", '; } } $string .= ")"; } if (isset($this->text)) { $string .= " text: (" . $this->text . ")"; } $string .= " HDOM_INNER_INFO: '"; if (isset($node->_[HDOM_INFO_INNER])) { $string .= $node->_[HDOM_INFO_INNER] . "'"; } else { $string .= ' NULL '; } $string .= " children: " . count($this->children); $string .= " nodes: " . count($this->nodes); $string .= " tag_start: " . $this->tag_start; $string .= "\n"; if ($echo) { echo $string; return; } else { return $string; } } // returns the parent of node // If a node is passed in, it will reset the parent of the current node to that one. function parent($parent=null) { // I am SURE that this doesn't work properly. // It fails to unset the current node from it's current parents nodes or children list first. if ($parent !== null) { $this->parent = $parent; $this->parent->nodes[] = $this; $this->parent->children[] = $this; } return $this->parent; } // verify that node has children function has_child() { return !empty($this->children); } // returns children of node function children($idx=-1) { if ($idx===-1) { return $this->children; } if (isset($this->children[$idx])) return $this->children[$idx]; return null; } // returns the first child of node function first_child() { if (count($this->children)>0) { return $this->children[0]; } return null; } // returns the last child of node function last_child() { if (($count=count($this->children))>0) { return $this->children[$count-1]; } return null; } // returns the next sibling of node function next_sibling() { if ($this->parent===null) { return null; } $idx = 0; $count = count($this->parent->children); while ($idx<$count && $this!==$this->parent->children[$idx]) { ++$idx; } if (++$idx>=$count) { return null; } return $this->parent->children[$idx]; } // returns the previous sibling of node function prev_sibling() { if ($this->parent===null) return null; $idx = 0; $count = count($this->parent->children); while ($idx<$count && $this!==$this->parent->children[$idx]) ++$idx; if (--$idx<0) return null; return $this->parent->children[$idx]; } // function to locate a specific ancestor tag in the path to the root. function find_ancestor_tag($tag) { global $debugObject; if (is_object($debugObject)) { $debugObject->debugLogEntry(1); } // Start by including ourselves in the comparison. $returnDom = $this; while (!is_null($returnDom)) { if (is_object($debugObject)) { $debugObject->debugLog(2, "Current tag is: " . $returnDom->tag); } if ($returnDom->tag == $tag) { break; } $returnDom = $returnDom->parent; } return $returnDom; } // get dom node's inner html function innertext() { if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER]; if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); $ret = ''; foreach ($this->nodes as $n) $ret .= $n->outertext(); return $ret; } // get dom node's outer text (with tag) function outertext() { global $debugObject; if (is_object($debugObject)) { $text = ''; if ($this->tag == 'text') { if (!empty($this->text)) { $text = " with text: " . $this->text; } } $debugObject->debugLog(1, 'Innertext of tag: ' . $this->tag . $text); } if ($this->tag==='root') return $this->innertext(); // trigger callback if ($this->dom && $this->dom->callback!==null) { call_user_func_array($this->dom->callback, array($this)); } if (isset($this->_[HDOM_INFO_OUTER])) return $this->_[HDOM_INFO_OUTER]; if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); // render begin tag if ($this->dom && $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]) { $ret = $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]->makeup(); } else { $ret = ""; } // render inner text if (isset($this->_[HDOM_INFO_INNER])) { // If it's a br tag... don't return the HDOM_INNER_INFO that we may or may not have added. if ($this->tag != "br") { $ret .= $this->_[HDOM_INFO_INNER]; } } else { if ($this->nodes) { foreach ($this->nodes as $n) { $ret .= $this->convert_text($n->outertext()); } } } // render end tag if (isset($this->_[HDOM_INFO_END]) && $this->_[HDOM_INFO_END]!=0) $ret .= 'tag.'>'; return $ret; } // get dom node's plain text function text() { if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER]; switch ($this->nodetype) { case HDOM_TYPE_TEXT: return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); case HDOM_TYPE_COMMENT: return ''; case HDOM_TYPE_UNKNOWN: return ''; } if (strcasecmp($this->tag, 'script')===0) return ''; if (strcasecmp($this->tag, 'style')===0) return ''; $ret = ''; // In rare cases, (always node type 1 or HDOM_TYPE_ELEMENT - observed for some span tags, and some p tags) $this->nodes is set to NULL. // NOTE: This indicates that there is a problem where it's set to NULL without a clear happening. // WHY is this happening? if (!is_null($this->nodes)) { foreach ($this->nodes as $n) { $ret .= $this->convert_text($n->text()); } // If this node is a span... add a space at the end of it so multiple spans don't run into each other. This is plaintext after all. if ($this->tag == "span" || $this->tag == "li" || $this->tag == "p" || $this->tag == "h1" || $this->tag == "h2" || $this->tag == "h3" || $this->tag == "h4" || $this->tag == "h5" ) { $ret .= $this->dom->default_span_text; } } return $ret; } function xmltext() { $ret = $this->innertext(); $ret = str_ireplace('', '', $ret); return $ret; } // build node's text with tag function makeup() { // text, comment, unknown if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); $ret = '<'.$this->tag; $i = -1; foreach ($this->attr as $key=>$val) { ++$i; // skip removed attribute if ($val===null || $val===false) continue; $ret .= $this->_[HDOM_INFO_SPACE][$i][0]; //no value attr: nowrap, checked selected... if ($val===true) $ret .= $key; else { switch ($this->_[HDOM_INFO_QUOTE][$i]) { case HDOM_QUOTE_DOUBLE: $quote = '"'; break; case HDOM_QUOTE_SINGLE: $quote = '\''; break; default: $quote = ''; } $ret .= $key.$this->_[HDOM_INFO_SPACE][$i][1].'='.$this->_[HDOM_INFO_SPACE][$i][2].$quote.$val.$quote; } } $ret = $this->dom->restore_noise($ret); return $ret . $this->_[HDOM_INFO_ENDSPACE] . '>'; } // find elements by css selector //PaperG - added ability for find to lowercase the value of the selector. function find($selector, $idx=null, $lowercase=false) { $selectors = $this->parse_selector($selector); if (($count=count($selectors))===0) return array(); $found_keys = array(); // find each selector for ($c=0; $c<$count; ++$c) { // The change on the below line was documented on the sourceforge code tracker id 2788009 // used to be: if (($levle=count($selectors[0]))===0) return array(); if (($levle=count($selectors[$c]))===0) return array(); if (!isset($this->_[HDOM_INFO_BEGIN])) return array(); $head = array($this->_[HDOM_INFO_BEGIN]=>1); // handle descendant selectors, no recursive! for ($l=0; $l<$levle; ++$l) { $ret = array(); foreach ($head as $k=>$v) { $n = ($k===-1) ? $this->dom->root : $this->dom->nodes[$k]; //PaperG - Pass this optional parameter on to the seek function. $n->seek($selectors[$c][$l], $ret, $lowercase); } $head = $ret; } foreach ($head as $k=>$v) { if (!isset($found_keys[$k])) $found_keys[$k] = 1; } } // sort keys ksort($found_keys); $found = array(); foreach ($found_keys as $k=>$v) $found[] = $this->dom->nodes[$k]; // return nth-element or array if (is_null($idx)) return $found; else if ($idx<0) $idx = count($found) + $idx; return (isset($found[$idx])) ? $found[$idx] : null; } // seek for given conditions // PaperG - added parameter to allow for case insensitive testing of the value of a selector. protected function seek($selector, &$ret, $lowercase=false) { global $debugObject; if (is_object($debugObject)) { $debugObject->debugLogEntry(1); } list($tag, $key, $val, $exp, $no_key) = $selector; // xpath index if ($tag && $key && is_numeric($key)) { $count = 0; foreach ($this->children as $c) { if ($tag==='*' || $tag===$c->tag) { if (++$count==$key) { $ret[$c->_[HDOM_INFO_BEGIN]] = 1; return; } } } return; } $end = (!empty($this->_[HDOM_INFO_END])) ? $this->_[HDOM_INFO_END] : 0; if ($end==0) { $parent = $this->parent; while (!isset($parent->_[HDOM_INFO_END]) && $parent!==null) { $end -= 1; $parent = $parent->parent; } $end += $parent->_[HDOM_INFO_END]; } for ($i=$this->_[HDOM_INFO_BEGIN]+1; $i<$end; ++$i) { $node = $this->dom->nodes[$i]; $pass = true; if ($tag==='*' && !$key) { if (in_array($node, $this->children, true)) $ret[$i] = 1; continue; } // compare tag if ($tag && $tag!=$node->tag && $tag!=='*') {$pass=false;} // compare key if ($pass && $key) { if ($no_key) { if (isset($node->attr[$key])) $pass=false; } else { if (($key != "plaintext") && !isset($node->attr[$key])) $pass=false; } } // compare value if ($pass && $key && $val && $val!=='*') { // If they have told us that this is a "plaintext" search then we want the plaintext of the node - right? if ($key == "plaintext") { // $node->plaintext actually returns $node->text(); $nodeKeyValue = $node->text(); } else { // this is a normal search, we want the value of that attribute of the tag. $nodeKeyValue = $node->attr[$key]; } if (is_object($debugObject)) {$debugObject->debugLog(2, "testing node: " . $node->tag . " for attribute: " . $key . $exp . $val . " where nodes value is: " . $nodeKeyValue);} //PaperG - If lowercase is set, do a case insensitive test of the value of the selector. if ($lowercase) { $check = $this->match($exp, strtolower($val), strtolower($nodeKeyValue)); } else { $check = $this->match($exp, $val, $nodeKeyValue); } if (is_object($debugObject)) {$debugObject->debugLog(2, "after match: " . ($check ? "true" : "false"));} // handle multiple class if (!$check && strcasecmp($key, 'class')===0) { foreach (explode(' ',$node->attr[$key]) as $k) { // Without this, there were cases where leading, trailing, or double spaces lead to our comparing blanks - bad form. if (!empty($k)) { if ($lowercase) { $check = $this->match($exp, strtolower($val), strtolower($k)); } else { $check = $this->match($exp, $val, $k); } if ($check) break; } } } if (!$check) $pass = false; } if ($pass) $ret[$i] = 1; unset($node); } // It's passed by reference so this is actually what this function returns. if (is_object($debugObject)) {$debugObject->debugLog(1, "EXIT - ret: ", $ret);} } protected function match($exp, $pattern, $value) { global $debugObject; if (is_object($debugObject)) {$debugObject->debugLogEntry(1);} switch ($exp) { case '=': return ($value===$pattern); case '!=': return ($value!==$pattern); case '^=': return preg_match("/^".preg_quote($pattern,'/')."/", $value); case '$=': return preg_match("/".preg_quote($pattern,'/')."$/", $value); case '*=': if ($pattern[0]=='/') { return preg_match($pattern, $value); } return preg_match("/".$pattern."/i", $value); } return false; } protected function parse_selector($selector_string) { global $debugObject; if (is_object($debugObject)) {$debugObject->debugLogEntry(1);} // pattern of CSS selectors, modified from mootools // Paperg: Add the colon to the attrbute, so that it properly finds like google does. // Note: if you try to look at this attribute, yo MUST use getAttribute since $dom->x:y will fail the php syntax check. // Notice the \[ starting the attbute? and the @? following? This implies that an attribute can begin with an @ sign that is not captured. // This implies that an html attribute specifier may start with an @ sign that is NOT captured by the expression. // farther study is required to determine of this should be documented or removed. // $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is"; $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-:]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is"; preg_match_all($pattern, trim($selector_string).' ', $matches, PREG_SET_ORDER); if (is_object($debugObject)) {$debugObject->debugLog(2, "Matches Array: ", $matches);} $selectors = array(); $result = array(); //print_r($matches); foreach ($matches as $m) { $m[0] = trim($m[0]); if ($m[0]==='' || $m[0]==='/' || $m[0]==='//') continue; // for browser generated xpath if ($m[1]==='tbody') continue; list($tag, $key, $val, $exp, $no_key) = array($m[1], null, null, '=', false); if (!empty($m[2])) {$key='id'; $val=$m[2];} if (!empty($m[3])) {$key='class'; $val=$m[3];} if (!empty($m[4])) {$key=$m[4];} if (!empty($m[5])) {$exp=$m[5];} if (!empty($m[6])) {$val=$m[6];} // convert to lowercase if ($this->dom->lowercase) {$tag=strtolower($tag); $key=strtolower($key);} //elements that do NOT have the specified attribute if (isset($key[0]) && $key[0]==='!') {$key=substr($key, 1); $no_key=true;} $result[] = array($tag, $key, $val, $exp, $no_key); if (trim($m[7])===',') { $selectors[] = $result; $result = array(); } } if (count($result)>0) $selectors[] = $result; return $selectors; } function __get($name) { if (isset($this->attr[$name])) { return $this->convert_text($this->attr[$name]); } switch ($name) { case 'outertext': return $this->outertext(); case 'innertext': return $this->innertext(); case 'plaintext': return $this->text(); case 'xmltext': return $this->xmltext(); default: return array_key_exists($name, $this->attr); } } function __set($name, $value) { switch ($name) { case 'outertext': return $this->_[HDOM_INFO_OUTER] = $value; case 'innertext': if (isset($this->_[HDOM_INFO_TEXT])) return $this->_[HDOM_INFO_TEXT] = $value; return $this->_[HDOM_INFO_INNER] = $value; } if (!isset($this->attr[$name])) { $this->_[HDOM_INFO_SPACE][] = array(' ', '', ''); $this->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE; } $this->attr[$name] = $value; } function __isset($name) { switch ($name) { case 'outertext': return true; case 'innertext': return true; case 'plaintext': return true; } //no value attr: nowrap, checked selected... return (array_key_exists($name, $this->attr)) ? true : isset($this->attr[$name]); } function __unset($name) { if (isset($this->attr[$name])) unset($this->attr[$name]); } // PaperG - Function to convert the text from one character set to another if the two sets are not the same. function convert_text($text) { global $debugObject; if (is_object($debugObject)) {$debugObject->debugLogEntry(1);} $converted_text = $text; $sourceCharset = ""; $targetCharset = ""; if ($this->dom) { $sourceCharset = strtoupper($this->dom->_charset); $targetCharset = strtoupper($this->dom->_target_charset); } if (is_object($debugObject)) {$debugObject->debugLog(3, "source charset: " . $sourceCharset . " target charaset: " . $targetCharset);} if (!empty($sourceCharset) && !empty($targetCharset) && (strcasecmp($sourceCharset, $targetCharset) != 0)) { // Check if the reported encoding could have been incorrect and the text is actually already UTF-8 if ((strcasecmp($targetCharset, 'UTF-8') == 0) && ($this->is_utf8($text))) { $converted_text = $text; } else { $converted_text = iconv($sourceCharset, $targetCharset, $text); } } // Lets make sure that we don't have that silly BOM issue with any of the utf-8 text we output. if ($targetCharset == 'UTF-8') { if (substr($converted_text, 0, 3) == "\xef\xbb\xbf") { $converted_text = substr($converted_text, 3); } if (substr($converted_text, -3) == "\xef\xbb\xbf") { $converted_text = substr($converted_text, 0, -3); } } return $converted_text; } /** * Returns true if $string is valid UTF-8 and false otherwise. * * @param mixed $str String to be tested * @return boolean */ static function is_utf8($str) { $c=0; $b=0; $bits=0; $len=strlen($str); for($i=0; $i<$len; $i++) { $c=ord($str[$i]); if($c > 128) { if(($c >= 254)) return false; elseif($c >= 252) $bits=6; elseif($c >= 248) $bits=5; elseif($c >= 240) $bits=4; elseif($c >= 224) $bits=3; elseif($c >= 192) $bits=2; else return false; if(($i+$bits) > $len) return false; while($bits > 1) { $i++; $b=ord($str[$i]); if($b < 128 || $b > 191) return false; $bits--; } } } return true; } /* function is_utf8($string) { //this is buggy return (utf8_encode(utf8_decode($string)) == $string); } */ /** * Function to try a few tricks to determine the displayed size of an img on the page. * NOTE: This will ONLY work on an IMG tag. Returns FALSE on all other tag types. * * @author John Schlick * @version April 19 2012 * @return array an array containing the 'height' and 'width' of the image on the page or -1 if we can't figure it out. */ function get_display_size() { global $debugObject; $width = -1; $height = -1; if ($this->tag !== 'img') { return false; } // See if there is aheight or width attribute in the tag itself. if (isset($this->attr['width'])) { $width = $this->attr['width']; } if (isset($this->attr['height'])) { $height = $this->attr['height']; } // Now look for an inline style. if (isset($this->attr['style'])) { // Thanks to user gnarf from stackoverflow for this regular expression. $attributes = array(); preg_match_all("/([\w-]+)\s*:\s*([^;]+)\s*;?/", $this->attr['style'], $matches, PREG_SET_ORDER); foreach ($matches as $match) { $attributes[$match[1]] = $match[2]; } // If there is a width in the style attributes: if (isset($attributes['width']) && $width == -1) { // check that the last two characters are px (pixels) if (strtolower(substr($attributes['width'], -2)) == 'px') { $proposed_width = substr($attributes['width'], 0, -2); // Now make sure that it's an integer and not something stupid. if (filter_var($proposed_width, FILTER_VALIDATE_INT)) { $width = $proposed_width; } } } // If there is a width in the style attributes: if (isset($attributes['height']) && $height == -1) { // check that the last two characters are px (pixels) if (strtolower(substr($attributes['height'], -2)) == 'px') { $proposed_height = substr($attributes['height'], 0, -2); // Now make sure that it's an integer and not something stupid. if (filter_var($proposed_height, FILTER_VALIDATE_INT)) { $height = $proposed_height; } } } } // Future enhancement: // Look in the tag to see if there is a class or id specified that has a height or width attribute to it. // Far future enhancement // Look at all the parent tags of this image to see if they specify a class or id that has an img selector that specifies a height or width // Note that in this case, the class or id will have the img subselector for it to apply to the image. // ridiculously far future development // If the class or id is specified in a SEPARATE css file thats not on the page, go get it and do what we were just doing for the ones on the page. $result = array('height' => $height, 'width' => $width); return $result; } // camel naming conventions function getAllAttributes() {return $this->attr;} function getAttribute($name) {return $this->__get($name);} function setAttribute($name, $value) {$this->__set($name, $value);} function hasAttribute($name) {return $this->__isset($name);} function removeAttribute($name) {$this->__set($name, null);} function getElementById($id) {return $this->find("#$id", 0);} function getElementsById($id, $idx=null) {return $this->find("#$id", $idx);} function getElementByTagName($name) {return $this->find($name, 0);} function getElementsByTagName($name, $idx=null) {return $this->find($name, $idx);} function parentNode() {return $this->parent();} function childNodes($idx=-1) {return $this->children($idx);} function firstChild() {return $this->first_child();} function lastChild() {return $this->last_child();} function nextSibling() {return $this->next_sibling();} function previousSibling() {return $this->prev_sibling();} function hasChildNodes() {return $this->has_child();} function nodeName() {return $this->tag;} function appendChild($node) {$node->parent($this); return $node;} } /** * simple html dom parser * Paperg - in the find routine: allow us to specify that we want case insensitive testing of the value of the selector. * Paperg - change $size from protected to public so we can easily access it * Paperg - added ForceTagsClosed in the constructor which tells us whether we trust the html or not. Default is to NOT trust it. * * @package PlaceLocalInclude */ class simple_html_dom { public $root = null; public $nodes = array(); public $callback = null; public $lowercase = false; // Used to keep track of how large the text was when we started. public $original_size; public $size; protected $pos; protected $doc; protected $char; protected $cursor; protected $parent; protected $noise = array(); protected $token_blank = " \t\r\n"; protected $token_equal = ' =/>'; protected $token_slash = " />\r\n\t"; protected $token_attr = ' >'; // Note that this is referenced by a child node, and so it needs to be public for that node to see this information. public $_charset = ''; public $_target_charset = ''; protected $default_br_text = ""; public $default_span_text = ""; // use isset instead of in_array, performance boost about 30%... protected $self_closing_tags = array('img'=>1, 'br'=>1, 'input'=>1, 'meta'=>1, 'link'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1); protected $block_tags = array('root'=>1, 'body'=>1, 'form'=>1, 'div'=>1, 'span'=>1, 'table'=>1); // Known sourceforge issue #2977341 // B tags that are not closed cause us to return everything to the end of the document. protected $optional_closing_tags = array( 'tr'=>array('tr'=>1, 'td'=>1, 'th'=>1), 'th'=>array('th'=>1), 'td'=>array('td'=>1), 'li'=>array('li'=>1), 'dt'=>array('dt'=>1, 'dd'=>1), 'dd'=>array('dd'=>1, 'dt'=>1), 'dl'=>array('dd'=>1, 'dt'=>1), 'p'=>array('p'=>1), 'nobr'=>array('nobr'=>1), 'b'=>array('b'=>1), 'option'=>array('option'=>1), ); function __construct($str=null, $lowercase=true, $forceTagsClosed=true, $target_charset=DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) { if ($str) { if (preg_match("/^http:\/\//i",$str) || is_file($str)) { $this->load_file($str); } else { $this->load($str, $lowercase, $stripRN, $defaultBRText, $defaultSpanText); } } // Forcing tags to be closed implies that we don't trust the html, but it can lead to parsing errors if we SHOULD trust the html. if (!$forceTagsClosed) { $this->optional_closing_array=array(); } $this->_target_charset = $target_charset; } function __destruct() { $this->clear(); } // load html from string function load($str, $lowercase=true, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) { global $debugObject; // prepare $this->prepare($str, $lowercase, $stripRN, $defaultBRText, $defaultSpanText); // strip out comments $this->remove_noise("''is"); // strip out cdata $this->remove_noise("''is", true); // Per sourceforge http://sourceforge.net/tracker/?func=detail&aid=2949097&group_id=218559&atid=1044037 // Script tags removal now preceeds style tag removal. // strip out