/* * Copyright 2012-2014 Sergey Ignatov * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.intellij.erlang.documentation; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import java.util.regex.Matcher; import java.util.regex.Pattern; final class ErlangSdkFunctionDocProvider extends ErlangSdkDocProviderBase { private static final Pattern PATTERN_FUNC_BEGIN = Pattern.compile( "<a name=\"(.*?)\"></a><span class=\"bold_code\">.*?</span><br>"); private static final Pattern PATTERN_BIF_BEGIN = Pattern.compile( "<a name=\"(.*?)\"><span class=\"bold_code\">.*?</span></a><br>"); private static final Pattern PATTERN_END_OF_DOC = Pattern.compile("^<div class=\"footer\">$"); @NotNull private final String myFuncSignature; public ErlangSdkFunctionDocProvider(@NotNull Project project, @NotNull String functionName, int functionArity, @NotNull VirtualFile virtualFile) { super(project, virtualFile); myFuncSignature = functionName + "-" + functionArity; } @NotNull @Override protected String getInDocRef() { return "#" + myFuncSignature; } @Override public boolean isDocBegin(@NotNull String line) { Matcher matcher = PATTERN_FUNC_BEGIN.matcher(line); while (matcher.find()) { if (matcher.group(1).equals(myFuncSignature)) { return true; } } matcher = PATTERN_BIF_BEGIN.matcher(line); while (matcher.find()) { if (matcher.group(1).equals(myFuncSignature)) { return true; } } return false; } @Override public boolean isDocEnd(@NotNull String line) { return PATTERN_FUNC_BEGIN.matcher(line).find() || PATTERN_BIF_BEGIN.matcher(line).find() || PATTERN_END_OF_DOC.matcher(line).matches(); } }