diff options
-rw-r--r-- | lib/token.cpp | 38 | ||||
-rw-r--r-- | lib/token.h | 8 |
2 files changed, 39 insertions, 7 deletions
diff --git a/lib/token.cpp b/lib/token.cpp index 88cc4da..945be5e 100644 --- a/lib/token.cpp +++ b/lib/token.cpp | |||
@@ -51,6 +51,7 @@ namespace verbly { | |||
51 | { | 51 | { |
52 | transform_.type_ = other.transform_.type_; | 52 | transform_.type_ = other.transform_.type_; |
53 | new(&transform_.strParam_) std::string(other.transform_.strParam_); | 53 | new(&transform_.strParam_) std::string(other.transform_.strParam_); |
54 | new(&transform_.strParam2_) std::string(other.transform_.strParam2_); | ||
54 | transform_.casingParam_ = other.transform_.casingParam_; | 55 | transform_.casingParam_ = other.transform_.casingParam_; |
55 | new(&transform_.inner_) std::unique_ptr<token>(new token(*other.transform_.inner_)); | 56 | new(&transform_.inner_) std::unique_ptr<token>(new token(*other.transform_.inner_)); |
56 | 57 | ||
@@ -86,6 +87,7 @@ namespace verbly { | |||
86 | std::list<token> tempUtterance; | 87 | std::list<token> tempUtterance; |
87 | transform_type tempTransformType; | 88 | transform_type tempTransformType; |
88 | std::string tempTransformStrParam; | 89 | std::string tempTransformStrParam; |
90 | std::string tempTransformStrParam2; | ||
89 | casing tempTransformCasingParam; | 91 | casing tempTransformCasingParam; |
90 | std::unique_ptr<token> tempTransformInner; | 92 | std::unique_ptr<token> tempTransformInner; |
91 | 93 | ||
@@ -131,6 +133,7 @@ namespace verbly { | |||
131 | { | 133 | { |
132 | tempTransformType = first.transform_.type_; | 134 | tempTransformType = first.transform_.type_; |
133 | tempTransformStrParam = std::move(first.transform_.strParam_); | 135 | tempTransformStrParam = std::move(first.transform_.strParam_); |
136 | tempTransformStrParam2 = std::move(first.transform_.strParam2_); | ||
134 | tempTransformCasingParam = first.transform_.casingParam_; | 137 | tempTransformCasingParam = first.transform_.casingParam_; |
135 | tempTransformInner = std::move(first.transform_.inner_); | 138 | tempTransformInner = std::move(first.transform_.inner_); |
136 | 139 | ||
@@ -184,6 +187,7 @@ namespace verbly { | |||
184 | { | 187 | { |
185 | first.transform_.type_ = second.transform_.type_; | 188 | first.transform_.type_ = second.transform_.type_; |
186 | new(&first.transform_.strParam_) std::string(std::move(second.transform_.strParam_)); | 189 | new(&first.transform_.strParam_) std::string(std::move(second.transform_.strParam_)); |
190 | new(&first.transform_.strParam2_) std::string(std::move(second.transform_.strParam2_)); | ||
187 | first.transform_.casingParam_ = second.transform_.casingParam_; | 191 | first.transform_.casingParam_ = second.transform_.casingParam_; |
188 | new(&first.transform_.inner_) std::unique_ptr<token>(std::move(second.transform_.inner_)); | 192 | new(&first.transform_.inner_) std::unique_ptr<token>(std::move(second.transform_.inner_)); |
189 | 193 | ||
@@ -237,6 +241,7 @@ namespace verbly { | |||
237 | { | 241 | { |
238 | second.transform_.type_ = tempTransformType; | 242 | second.transform_.type_ = tempTransformType; |
239 | new(&second.transform_.strParam_) std::string(std::move(tempTransformStrParam)); | 243 | new(&second.transform_.strParam_) std::string(std::move(tempTransformStrParam)); |
244 | new(&second.transform_.strParam2_) std::string(std::move(tempTransformStrParam2)); | ||
240 | second.transform_.casingParam_ = tempTransformCasingParam; | 245 | second.transform_.casingParam_ = tempTransformCasingParam; |
241 | new(&second.transform_.inner_) std::unique_ptr<token>(std::move(tempTransformInner)); | 246 | new(&second.transform_.inner_) std::unique_ptr<token>(std::move(tempTransformInner)); |
242 | 247 | ||
@@ -293,6 +298,7 @@ namespace verbly { | |||
293 | using ptr_type = std::unique_ptr<token>; | 298 | using ptr_type = std::unique_ptr<token>; |
294 | 299 | ||
295 | transform_.strParam_.~string_type(); | 300 | transform_.strParam_.~string_type(); |
301 | transform_.strParam2_.~string_type(); | ||
296 | transform_.inner_.~ptr_type(); | 302 | transform_.inner_.~ptr_type(); |
297 | 303 | ||
298 | break; | 304 | break; |
@@ -485,6 +491,16 @@ namespace verbly { | |||
485 | indefiniteArticle, | 491 | indefiniteArticle, |
486 | transform_.casingParam_); | 492 | transform_.casingParam_); |
487 | } | 493 | } |
494 | |||
495 | case transform_type::quote: | ||
496 | { | ||
497 | return transform_.strParam_ + | ||
498 | transform_.inner_->compileHelper( | ||
499 | separator, | ||
500 | indefiniteArticle, | ||
501 | capitalization) + | ||
502 | transform_.strParam2_; | ||
503 | } | ||
488 | } | 504 | } |
489 | } | 505 | } |
490 | } | 506 | } |
@@ -654,17 +670,17 @@ namespace verbly { | |||
654 | 670 | ||
655 | token token::separator(std::string param, token inner) | 671 | token token::separator(std::string param, token inner) |
656 | { | 672 | { |
657 | return token(transform_type::separator, std::move(param), std::move(inner)); | 673 | return token(transform_type::separator, std::move(param), "", std::move(inner)); |
658 | } | 674 | } |
659 | 675 | ||
660 | token token::punctuation(std::string param, token inner) | 676 | token token::punctuation(std::string param, token inner) |
661 | { | 677 | { |
662 | return token(transform_type::punctuation, std::move(param), std::move(inner)); | 678 | return token(transform_type::punctuation, std::move(param), "", std::move(inner)); |
663 | } | 679 | } |
664 | 680 | ||
665 | token token::indefiniteArticle(token inner) | 681 | token token::indefiniteArticle(token inner) |
666 | { | 682 | { |
667 | return token(transform_type::indefinite_article, "", std::move(inner)); | 683 | return token(transform_type::indefinite_article, "", "", std::move(inner)); |
668 | } | 684 | } |
669 | 685 | ||
670 | token token::capitalize(casing param, token inner) | 686 | token token::capitalize(casing param, token inner) |
@@ -672,6 +688,15 @@ namespace verbly { | |||
672 | return token(transform_type::capitalize, param, std::move(inner)); | 688 | return token(transform_type::capitalize, param, std::move(inner)); |
673 | } | 689 | } |
674 | 690 | ||
691 | token token::quote(std::string opening, std::string closing, token inner) | ||
692 | { | ||
693 | return token( | ||
694 | transform_type::quote, | ||
695 | std::move(opening), | ||
696 | std::move(closing), | ||
697 | std::move(inner)); | ||
698 | } | ||
699 | |||
675 | token& token::getInnerToken() | 700 | token& token::getInnerToken() |
676 | { | 701 | { |
677 | if (type_ != type::transform) | 702 | if (type_ != type::transform) |
@@ -694,12 +719,14 @@ namespace verbly { | |||
694 | 719 | ||
695 | token::token( | 720 | token::token( |
696 | transform_type type, | 721 | transform_type type, |
697 | std::string param, | 722 | std::string param1, |
723 | std::string param2, | ||
698 | token inner) : | 724 | token inner) : |
699 | type_(type::transform) | 725 | type_(type::transform) |
700 | { | 726 | { |
701 | transform_.type_ = type; | 727 | transform_.type_ = type; |
702 | new(&transform_.strParam_) std::string(std::move(param)); | 728 | new(&transform_.strParam_) std::string(std::move(param1)); |
729 | new(&transform_.strParam2_) std::string(std::move(param2)); | ||
703 | new(&transform_.inner_) std::unique_ptr<token>(new token(std::move(inner))); | 730 | new(&transform_.inner_) std::unique_ptr<token>(new token(std::move(inner))); |
704 | } | 731 | } |
705 | 732 | ||
@@ -711,6 +738,7 @@ namespace verbly { | |||
711 | { | 738 | { |
712 | transform_.type_ = type; | 739 | transform_.type_ = type; |
713 | new(&transform_.strParam_) std::string(); | 740 | new(&transform_.strParam_) std::string(); |
741 | new(&transform_.strParam2_) std::string(); | ||
714 | transform_.casingParam_ = param; | 742 | transform_.casingParam_ = param; |
715 | new(&transform_.inner_) std::unique_ptr<token>(new token(std::move(inner))); | 743 | new(&transform_.inner_) std::unique_ptr<token>(new token(std::move(inner))); |
716 | } | 744 | } |
diff --git a/lib/token.h b/lib/token.h index 0bbe79a..ae7bf96 100644 --- a/lib/token.h +++ b/lib/token.h | |||
@@ -116,6 +116,7 @@ namespace verbly { | |||
116 | static token punctuation(std::string param, token inner); | 116 | static token punctuation(std::string param, token inner); |
117 | static token indefiniteArticle(token inner); | 117 | static token indefiniteArticle(token inner); |
118 | static token capitalize(casing param, token inner); | 118 | static token capitalize(casing param, token inner); |
119 | static token quote(std::string open, std::string close, token inner); | ||
119 | 120 | ||
120 | token& getInnerToken(); | 121 | token& getInnerToken(); |
121 | const token& getInnerToken() const; | 122 | const token& getInnerToken() const; |
@@ -131,12 +132,14 @@ namespace verbly { | |||
131 | separator, | 132 | separator, |
132 | punctuation, | 133 | punctuation, |
133 | indefinite_article, | 134 | indefinite_article, |
134 | capitalize | 135 | capitalize, |
136 | quote | ||
135 | }; | 137 | }; |
136 | 138 | ||
137 | token( | 139 | token( |
138 | transform_type type, | 140 | transform_type type, |
139 | std::string param, | 141 | std::string param1, |
142 | std::string param2, | ||
140 | token inner); | 143 | token inner); |
141 | 144 | ||
142 | token( | 145 | token( |
@@ -156,6 +159,7 @@ namespace verbly { | |||
156 | struct { | 159 | struct { |
157 | transform_type type_; | 160 | transform_type type_; |
158 | std::string strParam_; | 161 | std::string strParam_; |
162 | std::string strParam2_; | ||
159 | casing casingParam_; | 163 | casing casingParam_; |
160 | std::unique_ptr<token> inner_; | 164 | std::unique_ptr<token> inner_; |
161 | } transform_; | 165 | } transform_; |