Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
user:zeman:interset:how-to-write-a-driver [2007/10/01 13:53] zeman use tagset::common; |
user:zeman:interset:how-to-write-a-driver [2007/10/01 15:37] zeman Replacing arrays. |
||
---|---|---|---|
Line 93: | Line 93: | ||
**Note:** This approach cannot encode situations where some combinations of feature values are plausible and some are not! For instance, if positions [2] and [3] in a tag encode gender and number, respectively, | **Note:** This approach cannot encode situations where some combinations of feature values are plausible and some are not! For instance, if positions [2] and [3] in a tag encode gender and number, respectively, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Replacing feature values with defaults ===== | ||
+ | |||
+ | The encoder' | ||
+ | |||
+ | - A table of replacement values for each value, ordered by precedence. There is a default table in '' | ||
+ | - The list of all tags in the tag set (implemented by the '' | ||
+ | |||
+ | Building the list of permitted values is expensive (all tags must be decoded!) and you should do it only once when your driver initializes. In your '' | ||
+ | |||
+ | <code perl> | ||
+ | use tagset:: | ||
+ | BEGIN | ||
+ | { | ||
+ | # Store the hash reference in a global variable. | ||
+ | $permitvals = tagset:: | ||
+ | } | ||
+ | ... | ||
+ | $replacement = tagset:: | ||
+ | </ | ||
+ | |||
+ | If an array is a permitted value, all member values are permitted. | ||
+ | |||
+ | If an array is checked, all member values must be permitted in order for the array to be permitted. Otherwise, the array is pruned and the replacement is a subarray where only permitted values are kept. If no member values are permitted (hence the pruned subarray would be empty), the replacement is a single value, the highest-priority replacement of the first element of the array. If the original array was empty (which should never happen but we ought to be careful anyway), the single empty value is checked and possibly replaced. | ||
===== Common problems ===== | ===== Common problems ===== |