// Set up the loop SET Temp-n TO LENGTH( TextVar ) SET LoopLimit-n[ Temp-n ] TO 1 // Start the variables at "" SET Temp-b TO TRUE SET PigSuffix-t TO "" SET Temp-t TO "" "" REPEAT Loop // Get the next letter in sequence SET Temp-t TO MID( "«TextVar:like this»", COUNTER, 1 ) // Skip everything but letters and spaces IF "abcdefghijklmnopqrstuvwxyz " CONTAINS "«Temp-t:like this»" // Are we looking at the first of the word? IF Temp-b // See if the letter is a consonant or space IF Temp-t != "a" AND Temp-t != "e" AND Temp-t != "i" AND Temp-t != "o" AND Temp-t != "u" AND Temp-t != "y" AND Temp-t != " " SET PigSuffix-t TO PigSuffix-t + Temp-t // A "u" after a "q" should stay with the "q" ELSE IF Temp-t = "u" AND PigSuffix-t = "q" SET PigSuffix-t TO PigSuffix-t + Temp-t // A space: must be an abreviation ELSE IF Temp-t = " " RESULT + PigSuffix-t + "ay " SET PigSuffix-t TO "" SET Temp-b TO TRUE // We've hit a vowel. The word begins. ELSE SET Temp-b TO FALSE RESULT + Temp-t END IF // Is this the end of the word? ELSE IF Temp-t = " " RESULT + PigSuffix-t + "ay " SET PigSuffix-t TO "" SET Temp-b TO TRUE ELSE IF COUNTER = LENGTH( TextVar ) RESULT + Temp-t + PigSuffix-t + "ay" SET PigSuffix-t TO "" SET Temp-b TO TRUE // Just a letter in the word ELSE RESULT + Temp-t END IF END IF END REPEAT // Reset the temporary variables SET LoopLimit-n[ Temp-n ] TO UNANSWERED SET Temp-n TO UNANSWERED SET Temp-t TO UNANSWERED SET Temp-b TO UNANSWERED SET PigSuffix-t TO UNANSWERED
Q: Why?
A: Why not? (slow afternoon)
This computation takes a text variable and returns its equivalent in Pig-Latin. Really. The model template has a version which is set up and ready to go without modification.
Limitations: Any character that is not a letter or a space is skipped. Also, the computation does not differentiate between the consonantal and vowel values of "y." In other words, "y" is always a vowel. For example, "hybrid" will correctly translate to "ybridhay," but "yes" incorrectly translates to "yesay" instead of "esyay." But hey, if you have a mission-critical template that absolutely needs this to be right, take an hour and work it out.
The Nitty-Gritty: The computation requires a repeated dialog called Loop. This dialog has a single temporary number variable in it called LoopLimit-n. The mechanics of the Loop are described in Computation #0015: Loops Via REPEAT. The computation also requires a few temporary variables -- a number, a text, and a true/false variable named Temp-n, Temp-t, and Temp-b respectively, and an additional text variable called PigSuffix-t. All of these temporary variables should have their Advanced options set to "Ask only in dialog," "Don't warn if unanswered," and "Don't save in answer file."
The computation uses the repeated dialog Loop to cycle through each letter of the text variable TextVar. Each pass through the loop analyzes the next letter in the string. The true/false variable Temp-b tells the computation whether it is examining the first part of a word. If so, the computation stores all consonants up to the first vowel in the variable PigSuffix-t. Once the first vowel is encountered, the computation uses the remaining letters in the word to form the Pig-Latin word. When either a space or the end of the string is encountered, the computation appends the contents of PigSuffix-t and adds an "ay."
Any character that is not a letter or a space is skipped.
This template has everything you need set up and configured for you. It will work as-is, or can be adapted to your variable and dialog names. It contains: 1) sample Word and WordPerfect templates (or an Automator form) to demonstrate an implementation of the computation, 2) a component file containing the computation and all supporting dialogs and variables, and 3) instructions for adapting the computation for your use.