@@ -59,13 +59,8 @@ class CodeView(context: Context, attrs: AttributeSet) : RelativeLayout(context,
5959 }
6060
6161 /* *
62- * Code adapter accessor.
63- */
64- private fun getAdapter () = vCodeList.adapter as ? AbstractCodeAdapter <* >
65-
66- /* *
67- * Highlight code by defined programming language.
68- * It holds the placeholder on the view until code is not highlighted.
62+ * Highlight code with defined programming language.
63+ * It holds the placeholder on view until code is not highlighted.
6964 */
7065 private fun highlight () {
7166 getAdapter()?.highlight {
@@ -97,51 +92,95 @@ class CodeView(context: Context, attrs: AttributeSet) : RelativeLayout(context,
9792 /* *
9893 * Prepare view with default adapter & options.
9994 */
100- private fun prepare () {
101- setAdapter(CodeWithNotesAdapter (context))
102- }
95+ private fun prepare () = setAdapter(CodeWithNotesAdapter (context))
96+
97+ /* *
98+ * View options accessor.
99+ */
100+ fun getOptions (): Options ? = getAdapter()?.options
103101
104102 /* *
105103 * Initialize with options.
106104 *
107- * @param opts Options
105+ * @param options Options
106+ */
107+ fun setOptions (options : Options ) = setOptions(options, false )
108+
109+ /* *
110+ * Set options & initialize if needed.
111+ *
112+ * @param options Options
113+ * @param isSaveAdapter Save adapter?
108114 */
109- fun setOptions (opts : Options ) {
110- setAdapter(CodeWithNotesAdapter (context, opts))
115+ fun setOptions (options : Options , isSaveAdapter : Boolean = true) {
116+ setAdapter(if (isSaveAdapter)
117+ getAdapter() ? : CodeWithNotesAdapter (context, options)
118+ else
119+ CodeWithNotesAdapter (context, options))
111120 }
112121
122+ /* *
123+ * Code adapter accessor.
124+ */
125+ fun getAdapter () = vCodeList.adapter as ? AbstractCodeAdapter <* >
126+
113127 /* *
114128 * Initialize with adapter.
115129 *
116130 * @param adapter Adapter
117131 */
118- fun setAdapter (adapter : AbstractCodeAdapter <* >) {
132+ fun setAdapter (adapter : AbstractCodeAdapter <* >) = setAdapter(adapter, false )
133+
134+ /* *
135+ * Set adapter & initialize if needed.
136+ *
137+ * @param adapter Adapter
138+ * @param isSaveOptions Save options?
139+ */
140+ fun setAdapter (adapter : AbstractCodeAdapter <* >, isSaveOptions : Boolean = true) {
141+ if (isSaveOptions)
142+ adapter.options = getOptions() ? : Options (context)
143+
119144 vCodeList.adapter = adapter
120- setupShadows(adapter.opts .shadows)
145+ setupShadows(adapter.options .shadows)
121146 highlight()
122147 }
123148
124149 /* *
125150 * Set code content.
126- * At this point view should be prepared, otherwise it
127- * will be configured automatically with default params.
151+ *
152+ * There are two ways before code will be highlighted:
153+ * 1) view is not initialized (adapter or options are not set),
154+ * prepare with default params & try to classify language
155+ * 2) view initialized with some params, language:
156+ * a) is set: used defined programming language
157+ * b) not set: try to classify
128158 *
129159 * @param code Code content
130160 */
131161 fun setCode (code : String ) {
132162 getAdapter() ? : prepare()
133- getAdapter()? .updateCode(code)
163+ getAdapter()!! .updateCode(code)
134164 }
135165
136166 /* *
137167 * Set code content.
138168 *
169+ * There are two ways before code will be highlighted:
170+ * 1) view is not initialized, prepare with default params
171+ * 2) view initialized with some params, set new language
172+ *
139173 * @param code Code content
140174 * @param language Programming language
141175 */
142176 fun setCode (code : String , language : String ) {
143- getAdapter() ? : setOptions(Options (context, language = language))
144- getAdapter()?.updateCode(code)
177+ val options = if (getAdapter() == null )
178+ Options (context)
179+ else
180+ getAdapter()!! .options
181+
182+ setOptions(options.withLanguage(language))
183+ getAdapter()!! .updateCode(code)
145184 }
146185}
147186
0 commit comments